如何使用 pinvoke 将图像从 c 或 c++ 发送到 C#
Posted
技术标签:
【中文标题】如何使用 pinvoke 将图像从 c 或 c++ 发送到 C#【英文标题】:How to send the image from c or c++ to C# with pinvoke 【发布时间】:2014-02-04 14:02:55 【问题描述】:如何使用 Pinvoke 将图像文件从 C 或 C++ 发送到 C#,如果可能,请粘贴代码...
来自文件指针或来自 C 的其他指针,以及如何在 C# 端投射和显示图像。
【问题讨论】:
Pinvoke 是一项允许 C# 调用 C 或 C++ 代码的功能。你这样做是错误的。使用 COM 或托管 CLR 让 C++ 程序使用 .NET 代码。 【参考方案1】:C#/VB 使用位图,所以你必须先转换它。
对于带有“fileapi.h”的 c++
extern "C" __declspec(dllexport) void MyFunct(HANDLE* fileHandle)
*fileHandle = CreateFile(MyBitmap, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
用于 VB.Net
<System.Runtime.InteropServices.DllImport("MyDll.dll")> _
Public Shared Sub MyFunct(ByRef fileHandle As IntPtr)
End Sub
Sub MyFunction()
Dim picture As System.Drawing.Image
Dim sFileHandle As Microsoft.Win32.SafeHandles.SafeFileHandle
Dim FilePointer As IntPtr
MyFunct(FilePointer)
sFileHandle = New Microsoft.Win32.SafeHandles.SafeFileHandle(FilePointer, True)
picture = Image.FromStream(New System.IO.FileStream(sFileHandle, IO.FileAccess.Read))
End Sub
这是一种不使用 Marshalling 和 PInvoke 的方法,但它“又快又脏”,因此您必须自己处理指针和内存...
【讨论】:
嗨 Beinfreiheit,你能用 C# 编写它吗,我是 C# 新手,我不知道 VB。 嗨,我在图片 = Image.FromStream(New System.IO.FileStream(sFileHandle, IO.FileAccess.Read)) 处遇到异常,它说参数无效.. CreateFile 中的 MyBitmap 是jpg 不是位图...或者你可以告诉我如何在 C++ 中创建 jpg 图像的位图以上是关于如何使用 pinvoke 将图像从 c 或 c++ 发送到 C#的主要内容,如果未能解决你的问题,请参考以下文章
将带有结构字段的结构从 c++ 返回到 c# pinvoke
如何使用 PInvoke 将 std::wstring 从 C++ 返回到 C# 而无需编写字符串缓冲区转换 [重复]
__vectorcall 通过 C++/CLI 或 PInvoke (C#)