Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#元帅/平沃克CBitmap? < >我无法理解如何将C++的位图封到C位图或图像类。< /P>_C#_C++_Pinvoke - Fatal编程技术网

C#元帅/平沃克CBitmap? < >我无法理解如何将C++的位图封到C位图或图像类。< /P>

C#元帅/平沃克CBitmap? < >我无法理解如何将C++的位图封到C位图或图像类。< /P>,c#,c++,pinvoke,C#,C++,Pinvoke,我的导入如下所示: [DllImport(@“test.dll”,CharSet=CharSet.Unicode)] 公共静态外部IntPtr GetBitmap(System.IntPtr hwnd、int nBMPWIDTH、int nBMPHEIGHT) H文件部分如下所示: Cbitmap*GetBitmap(HWND-HWND,int-nBMPWIDTH,int-nBMPHEIGHT) 如何将Cbitmap转换为可以在C#中显示的内容 非常感谢。在.NET Framework中最接近的

我的导入如下所示:

[DllImport(@“test.dll”,CharSet=CharSet.Unicode)] 公共静态外部IntPtr GetBitmap(System.IntPtr hwnd、int nBMPWIDTH、int nBMPHEIGHT)

H文件部分如下所示:

Cbitmap*GetBitmap(HWND-HWND,int-nBMPWIDTH,int-nBMPHEIGHT)

如何将Cbitmap转换为可以在C#中显示的内容


非常感谢。

在.NET Framework中最接近的API是Image.FromHbitmap,但这需要您从CBitmap中提取HBITMAP,这在C#中是无法做到的(至少在不了解CBitmap的内部结构的情况下是如此)。如果您可以修改C++的GETBMAP函数来返回HbM映图而不是CMPMAP包装器,那将是最简单的解决方案。这是你的选择吗?

附议。您必须从cBMPMAP中获得HbMMAP,这是您必须在C++中完成的。从技术上讲,可以封课,但你必须知道它是正确的内存布局。我没有访问C++ DLL源的权限。我能做什么?谢谢。创建一个小的C++函数如下:HBITMAP GetHandle(cBMPMAP*PBMMAP){Read(HbMMAP)(*PbMMAP);}。然后P/调用它,传递您的CBitmap IntPtr。返回的IntPtr是HBITMAP。(仍然有位图*的原因是,你可以推迟它直到你完成了HbMMAP;否则,CMPMAP析构函数会为你的句柄垃圾。我会在管理CLR C++中创建这个C++函数吗?)还是win32?谢谢。我在想C++。但您可能是对的,它也可以在C++/CLI中完成,在这种情况下,您不需要P/调用包装器,因为这将是一个从.NET到-.NET的调用(并且到本机代码的转换将在您的C++/CLI程序集中进行)。