如何将.NET位图传递给本机DLL?这就是我所拥有的:我猜这是某种P/Invoke,但我从来没有做过,而且我不知道在这种情况下如何正确地做。我该怎么办?您需要调用Bitmap.GetHbitmap()来获取位图的本机句柄。然后你基本上想做一些本机互操作并调用GetDIBits()。最好让目标dll实际调用GetDIBits()并传递win32句柄而不是互操作。您需要从GetDC(NULL)调用桌面DC上的CreateCompatibleDC(),然后在刚创建的DC上调用CreateCompatibleBitmap()。然后调用GetDIBits()。C函数原型只需要一个指向缓冲区的指针和缓冲区的大小,它希望在缓冲区内看到的内容是$64K。我的假设/猜测是它是ByteArrayforms的位图位。所以...我想这需要分解成几个步骤...[未经测试,但我认为总体思路是合理的]*从位图中获取数据,可能是字节数组*将非托管缓冲区分配给store_data*复制字节数组到缓冲区。*将缓冲区指针传递给您的Cdll*完成后释放缓冲区您可以使用IntPtrpnt=Marshal.AllocHGlobal(size);分配非托管缓冲区您可以使用Marshal.Copy(theByteArray,0,pnt,theByteArray.Length);复制字节数组。请注意,由于它是非托管数据,因此您有责任在完成后释放它。Marshal.FreeHGlobal(ptr)请注意,正如@jeffamaphone所说,如果您有权访问c代码,最好将句柄传递给位图。以上就是C#学习教程:Howtopassthe.NETbitmaptonativeDLL?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
