如何调用从c#代码中绘制WPF图像的本机代码

本文关键字:绘制 WPF 图像 本机代码 代码 何调用 调用 | 更新日期: 2023-09-27 18:10:03

我有一个本机库(没有可用的源代码)包装在c#代码中。

存在以下c#声明:

[DllImport(DRIVER_DLL_NAME, 
 CallingConvention = CallingConvention.Cdecl, 
 EntryPoint = "RenderBitmap")]
private static extern int RenderBitmap(int hWnd);

我需要从我的WPF c#项目中调用这个函数。

我有一个Windows窗体的工作示例代码:

System.Windows.Forms.PictureBox DisplayWindow;
...
RenderBitmap(DisplayWindow.Handle.ToInt32());

我还没有发现如何用WPF System.Windows.Controls.Image代替System.Windows.Forms.PictureBox -没有Handle属性或类似的东西。

此外,我在"WPF和Win32互操作"中发现了以下声明:"当你创建一个WPF窗口时,WPF创建一个顶级HWND,并使用HwndSource将窗口及其WPF内容放在HWND中。应用程序中其余的WPF内容共享这个HWND."Image似乎根本不存在HWND句柄。

如何调用从c#代码绘制WPF图像的本地代码?

如何调用从c#代码中绘制WPF图像的本机代码

WPF控件不像WinForms那样有句柄。只有主窗口句柄可访问:

例如,在主窗口类(或使用Application.Current.MainWindow):

 var handle = (new WindowInteropHelper(this)).Handle;
 var hwnd = HwndSource.FromHwnd(handle);

所以看起来你必须考虑另一种方法而不是本机调用。

顺便说一句,为什么你需要这么低级的绘图功能?我只能假设你只是想重用已经实现的一个WinForms。也许您可以使用内置的WPF功能实现相同的目标。