【发布时间】:2012-11-01 08:32:30
【问题描述】:
我有一个 c++ dll,它有一些外部函数。 它看起来像这样
//C++ Code
void GetData(byte * pData)
{
byte a[] = {3,2,1};
pData = a;
}
我已经在 C# 端使用此代码来获取数据:
//C# Code
[DllImport(UnmanagedDLLAddress)]
public static extern void GetData(ref IntPtr pData);
//and use it like
IntPtr pointer = IntPtr.Zero;
GetData(ref pointer);
byte[] data = new byte[3] // <===== think we know size
Marshal.Copy(pointer,data ,0,3);
但“指针”总是为零,所以 Marshal.Copy 抛出空异常 我在哪里做错了? 太棒了
【问题讨论】:
-
@billz : typedef unsigned char byte;
-
@mX64 改成
static const. -
@Pubby 不,它没有。如果它返回一个指向本地数组的指针,该数组将是 UB,但它没有。正如所写的那样,代码什么都不做。
-
@john 哦,只是修改了本地的
pData。是的,它什么都不做,虽然看起来他的意图会涉及 UB。