c# - 从 C++ 中的 char* 获取 C# 中的 byte[]

标签 c# c++ dll marshalling

在 C# 中,我有一个数据类型 byte[],我想使用返回 char* 的 C++ 函数来填充它

C++ 函数(在 ImageData.dll 中)

char* pMemoryBuffer = NULL;
char* LoadData(const char *fileName)
{
    // processing pMemoryBuffer ...
    return pMemoryBuffer;  
}

将 native dll 导入 C#:

    [DllImport(".\\Modules_Native\\ImageData.dll", EntryPoint = "LoadData")]
   private extern static byte[] LoadData(string fileName);

C#中的byte[]数据

byte[] buffer = new byte[256*256];
buffer = LoadData("D:\\myPic.tif");

显然它还没有工作,但它提出了我想做的事情的想法。所以我想知道如何进行这项工作,以及正确的方法是什么。非常感谢您的教育。

最佳答案

试试这个

// c++

    void LoadData(unsigned char* *pMemoryBuffer, const char *fileName)
    {
        // processing pMemoryBuffer ...
        *pMemoryBuffer = resutss;

    }

将 native dll 导入 C#:

[DllImport(".\\Modules_Native\\ImageData.dll", EntryPoint = "LoadData")]
private extern static void LoadData(out IntPtr data, string fileName);

当函数返回时,数据将指向数组,您可以使用 Marshal 类读取内容。我猜你会 copy it to a new byte arra是的。

byte[] buffer = new byte[256*256];
buffer = Marshal.Copy(LoadData(buffer ,"D:\\myPic.tif"), buffer , 0, buffer.Length);

关于c# - 从 C++ 中的 char* 获取 C# 中的 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24454176/

相关文章:

delphi - FastMM 和动态加载的 DLL

c# - 在 C# 中计算图像差异

c# - 寻找解释设计模式的高质量视频

c++ - Qt给QComboBox添加非方形图标

c++ - dll <dllname.dll><functionname> 中的类型无效,但我没有看到错误

java - 使用 JMagick 调整图像大小

c# - 生成的线程是否以用户身份自动运行?

c# - Blazor UI 锁定

c++ - GetCPUDescriptorHandleForHeapStart 堆栈损坏

c++ - 可能未初始化的本地指针变量 - 替代方案?