我有一个本机库(没有可用的源代码)包装在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图像的本地代码?
WPF控件不像WinForms那样有句柄。只有主窗口句柄可访问:
例如,在主窗口类(或使用Application.Current.MainWindow
):
var handle = (new WindowInteropHelper(this)).Handle;
var hwnd = HwndSource.FromHwnd(handle);
所以看起来你必须考虑另一种方法而不是本机调用。
顺便说一句,为什么你需要这么低级的绘图功能?我只能假设你只是想重用已经实现的一个WinForms。也许您可以使用内置的WPF功能实现相同的目标。