我从c#调用一个非托管的dll。如果我将输出char数组作为最后一个参数传递,则它在c ++代码中为null。但是,如果我将它作为第一个参数传递它就像所有其他参数一样好(我没有尝试将它作为第二个或第三个参数)。
这是失败的签名:
void __declspec(dllexport) processBuffer(const char *token, const char *inBuffer, const long inBufferSize, char *outBuffer);
c#代码是 - 包装类:
[DllImport(@"<path to dll>\<dllname>.dll", CallingConvention = CallingConvention.Cdecl)]
static class NativeCalls
{
public static extern void processBuffer(string token, char[] inBuffer, long inBufferSize, [In, Out] char[] outBuffer);
}
调用非托管DLL:
// token, inBuffer and inBuffer size defined above
char[] outBuffer = new char[outBufferSize];
NativeCalls.processBuffer(token, inBuffer, inBufferSize, outBuffer);
通过此调用,outBuffer将c ++代码作为0x00000000(null)输入。其余参数都是正确的。
如果我更改了代码,那么outBuffer是第一个参数(在所有必要的位置),它到达c ++ not null,可以无误地写入,并在调用返回后检查时显示有效数据。
显然,出了点问题......我只是不知道是什么。任何和所有的帮助非常感谢!