1
我的C++ DLL具有这样的功能:如何使用C#中的int&和int *参数调用C++ dll函数?
void func1(int& count, int* pValue);
这个函数将确定的“计数”,并且把一些值的p值int数组,这是“计数”的长度。
我该如何定义我的C#代码?你可以忽略[DllImport ...]部分。
感谢,
我的C++ DLL具有这样的功能:如何使用C#中的int&和int *参数调用C++ dll函数?
void func1(int& count, int* pValue);
这个函数将确定的“计数”,并且把一些值的p值int数组,这是“计数”的长度。
我该如何定义我的C#代码?你可以忽略[DllImport ...]部分。
感谢,
由参&
是不会,因为我已经制定了尽可能的情况发生。
,不要忘记给你的函数从C++导出为extern "C"
根据MSDN: Default marshaling for arrays C#的身边,我想你想的东西像下面
public static extern void func1(
out int count,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=0)] int[] values);
凡SizeParamIndex
告诉.net哪个参数将保持数组的大小被编组。
谢谢你,Greg。我已要求他们将int&更改为int *。我仍然被int * PValue参数弄糊涂了。这里的C++端意味着一个int数组。如果我在C#端使用“[OutAttribute] int pValue”,我该如何使用数组? – 5YrsLaterDBA 2010-06-24 02:37:30
并且在那篇文章中也提到: - 有些情况下[OutAttribute]将被忽略。例如,[OutAttribute] int没有任何意义,所以[OutAttribute]简单地被CLR忽略。 [OutAttribute]字符串也是如此,因为字符串是不可变的.---我不能在int中使用[OutAttribute]? – 5YrsLaterDBA 2010-06-24 02:42:31
好吧我想我可以使用这个:[MarshalAs(UnmanagedType.LPArray)] Int32 []为这两个参数。我还需要[OutAttribute]吗?这两个参数确实是“out”类型。 – 5YrsLaterDBA 2010-06-24 03:12:41