从DLL中调用C#中的C ++函数 – 奇怪的参数

我有一个用C ++写的函数和下一个标题:

void EncodeFromBufferIN(void* bufferIN,int bufferINSize, unsigned char* &bufferOUT, int &bufferOUTSize); 

我已经编辑了像这样的.h和.cpp文件,以便能够通过在C#中导入DLL来调用该函数:

 **EncodeFromBufferIN.h** extern "C" { __declspec(dllexport) void EncodeFromBufferIN(void* bufferIN, int bufferINSize, unsigned char* &bufferOUT, int &bufferOUTSize); } **EncodeFromBufferIN.cpp** extern void EncodeFromBufferIN(void* bufferIN, int bufferINSize, unsigned char* &bufferOUT, int &bufferOUTSize){ // stuff to be done } 

但现在我的问题是我不知道如何在C#中调用该函数。 我在C#中添加了下一个代码,但不确定如何将参数传递给函数。

 [DllImport("QASEncoder.dll")] unsafe public static extern void EncodeFromBufferIN(void* bufferIN, int bufferINSize, out char[] bufferOUT, out int bufferOUTSize); 

bufferIN和bufferOUT应该是字符串,但如果我正在调用这样的函数:

 public string prepareJointsForQAS() { string bufferIN = "0 0 0 0 0"; char[] bufferOUT; int bufferOUTSize; EncodeFromBufferIN(bufferIN, bufferIN.Length, bufferOUT, bufferOUTSize); } 

我得到这个错误:“最好的重载方法matrch for …有一些无效的参数”。 那么参数应该如何传递?

编组在C Style调用中效果最佳。 因此,最好在公共接口上使用纯C。 如果完全可以将本机代码更改为

 void EncodeFromBufferIN( unsigned char* bufferIN, int bufferINSize, unsigned char* bufferOUT, int* bufferOUTSize); 

然后可以在C#中调用

 [DllImport("QASEncoder.dll")] public static extern void EncodeFromBufferIN( String bufferIN, int bufferINSize, StringBuilder bufferOUT, ref int bufferOUTSize); String inStr = new String(255); int inSize = 255; // make an educated estimate for the output size // and preallocate in C# (I am guessing 255) StringBuilder outStr = new StringBuilder(255); int outSize = 255; EncodeFromBufferIN(inStr, inSize, outStr, outSize); 

这样,您可以避免非托管代码中的内存分配(虽然可行)可能会变得混乱。

希望这能让你前进。

一些对我有用的修正:

  string inStr = "Value to pass"; int inSize = inStr.Length; StringBuilder outStr = new StringBuilder(255); int outSize = 255; EncodeFromBufferIN(inStr, inSize, outStr, ref outSize); 

问候。