调用非托管dll的最后一个参数始终为null

时间:2016-09-14 23:23:50

标签: c# c++ dll unmanaged

我从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,可以无误地写入,并在调用返回后检查时显示有效数据。

显然,出了点问题......我只是不知道是什么。任何和所有的帮助非常感谢!

0 个答案:

没有答案