我的C++函数
void FillArray(wchar_t** arr)
{
// some code
for(i= 0;i<end;++i)
{
wcsncpy(arr[i],InforArray[i],MaxLength);
count++;
}
}
我的 C# 签名是
[DllImport("Native.dll", CharSet = CharSet.Unicode,EntryPoint = "FillArray")]
internal static extern void FillArray(
[MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.LPWStr)]
IntPtr[] OutBuff);
同时给出C#代码本身:
int maxLen = 256;
int count = GetPropertyCount(ref eData);
IntPtr[] buffer = new IntPtr[count];
for (int i = 0; i < count; i++)
buffer[i] = Marshal.AllocHGlobal(maxLen);
FillArray(buffer);
string[] output = new string[count];
for (int i = 0; i < count; i++)
{
output[i] = Marshal.PtrToStringUni(buffer[i]);
Marshal.FreeHGlobal(buffer[i]);
}
c++循环中没有问题地填充了数据,但是当退出FillArray时,我收到了"System.OutOfMemoryException"类型的未处理异常。
有什么想法吗?
GetPropertyCount
函数是做什么的(假设它不是 .NET 框架的一部分,因为我在 MSDN 上找不到它作为一个纯函数)?异常抛出的是哪一行? - foxy