从 C# 应用程序执行C++函数

本文关键字:C++ 函数 执行 应用程序 | 更新日期: 2023-09-27 18:30:17

我有一个用C++编写的DLL,它是围绕LZO库的C#包装器。但是出于测试目的,我想知道我是否可以转换类型,所以我创建了一个测试函数,该函数接收文件的内容和大小并写入它的副本。

extern "C" 
{
     __declspec(dllexport) void WriteFile(lzo_uint8 * source, int size)
    {
        FILE * fileToWrite;
       fileToWrite = fopen("test.eix", "wb+");
       if (fileToWrite)
       {
          fwrite(source, 1, size, fileToWrite);
       }
       fclose(fileToWrite);
       free(source);
    }
  }

以下是代码的图像,以提高可读性: http://i.epvpimg.com/u4mgh.png

然后我像这样导入它:

[DllImport(@"GLZO.dll")]
public static extern void WriteFile(byte[] source, int size);

并像这样称呼它:

        byte[] g = ReadFile("raw/roota.eix");
        WriteFile(g, g.Length);

问题不在于读取文件功能,我检查了它。我从另一个文件创建了一个副本,并使用校验和检查了两者。

所以,我的问题是:我应该如何将字节 [] 转换为 lzo_uint8*(无符号字符*)?

从 C# 应用程序执行C++函数

知道了!我只需要将其编组到 IntPtr,无符号字符 * = C# 中的 IntPtr。

此外,为了避免有关"不等效"类型的异常,您需要按如下所示导入 dll:

        [DllImport(@"GLZO.dll", CallingConvention = CallingConvention.Cdecl)]