【发布时间】:2012-09-19 02:00:18
【问题描述】:
我有一个用 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);
}
我收到此错误:“...的最佳重载方法匹配有一些无效参数”。那么参数应该如何传递呢?
【问题讨论】:
-
我不知道你的电话会如何工作。什么为输出缓冲区分配内存?什么可以释放它?
-
我看到了 unsigned char* &bufferOUT。您是否更改了 cpp 代码中的 char 指针?此外,您对该功能的 pinvoke 方法无效。您必须使用某种“out string bufferIn”,但请在 MSDN 文档中为您的案例检查 marshaling 属性。
-
@David 这就是问题所在,我不知道如何调用函数以及参数在 C# 中应该如何匹配 C++ 中的参数
-
@MaxFX 不,指针没有改变