实际上我在C#中使用C ++ dll如下
我的C ++代码
extern "C" __declspec(dllexport)
char** __stdcall hh()
{
static char* myArray[3] = {"A1", "BB2", "CC3",};
return myArray;
}
我的C#代码
[DllImport(@"ourdll.dll",CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall)]
public static extern IntPtr hh();
static void Main(string[] args)
{
IntPtr a = hh();
int j = 0;
string[] s=new string[100]; //I want this to be dynamic
do
{
s[j] = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(a,4*j));
j++;
}
while(s[j-1] != null);
}
我无法获得hh()返回的数组大小;如何获取数组的大小以便我的代码行
string [] s = new string [100]; 改变为 string [] s = new string [ACtual array of array];
答案 0 :(得分:3)
您要么必须返回数组的大小(可能是引用的变量),要么可以在列表中添加NULL终止符。如果使用NULL终止符,则可以循环遍历数组,直到找到NULL以确定大小。
答案 1 :(得分:1)
答案 2 :(得分:0)
这种类型的数组称为C样式数组,.NET框架的编组服务由于其原始性质而对它的支持有限,因此您应该考虑使用引用参数返回数组的长度(这在Win32 api编程中非常常见,作为示例)。 还要记住,C风格数组的长度根本不是动态的,必须是一个常量表达式,因此hh()函数不会返回任何动态长度值,而只是一个硬编码数据。