【问题标题】:How to send the image from c or c++ to C# with pinvoke如何使用 pinvoke 将图像从 c 或 c++ 发送到 C#
【发布时间】:2014-02-04 14:02:55
【问题描述】:

如何使用 Pinvoke 将图像文件从 C 或 C++ 发送到 C#,如果可能,请粘贴代码...

来自文件指针或来自 C 的其他指针,以及如何在 C# 端投射和显示图像。

【问题讨论】:

  • Pinvoke 是一项允许 C# 调用 C 或 C++ 代码的功能。你这样做是错误的。使用 COM 或托管 CLR 让 C++ 程序使用 .NET 代码。

标签: c# c++ c visual-c++


【解决方案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 图像的位图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2023-04-05
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多