比如说,我有一个暴露在 DLL 上的函数原型:
int CALLBACK worker (char* a_inBuf, int a_InLen,
char** a_pOutBuf, int* a_pOutLen,
char** a_pErrBuf, int* a_pErrLen)
我确信从我的 C# 代码中调用该 DLL 函数非常容易,但它不适用于以下代码:
[DllImport("mydll.dll")]
public static extern int worker(
[In, MarshalAs(UnmanagedType.LPArray)] byte[] inBuf,
int inputLen,
[Out, MarshalAs(UnmanagedType.LPArray)] byte[] outBuf,
out int outputLen,
[Out, MarshalAs(UnmanagedType.LPArray)] byte[] errBuf,
out int errorLen);
...
int outputXmlLength = 0;
int errorXmlLength = 0;
byte[] outputXml = null;
byte[] errorXml = null;
worker(input, input.Length, output, out outputLength, error, out errorLength);
当我要为我的非托管库获取内存时,我遇到了访问冲突(因此取消引用传递的指针)output
:error
*a_ppBuffer = (char*) malloc(size*sizeof(char));
如何
DLLIMPORT
在我的 C# 代码中为此函数编写语句?我如何实际调用该函数以便可以访问
a_pOutBuf
而a_pErrBuf
不是null
从内部访问worker
(即使用真正的双指针)?