日期:2014-05-18  浏览次数:20755 次

关于C#调用 win32的DLL,如何调用指针呢?
C++中关于TPalg.dll的这个函数定义为:

extern "C" int INTERFACE_EXPORT GetYC_GD(byte *pData);

我引入C#,

  [DllImport("TPalg.dll", CharSet = CharSet.Auto)] //
  public static extern int GetYC_GD(byte[] pData);

然后我:

byte[] pData=new byte[32];//32个字节的内容
GetYC_GD(pData);

怎么跟我说内存不能为read呢?

这种如何调用呢?不要用unsafe之类的句子啊,大侠

------解决方案--------------------
用IntPtr
 [DllImport("TPalg.dll", CharSet = CharSet.Auto)] //
public static extern int GetYC_GD(IntPtr pData);

IntPtr p = System.Runtime.InteropServices.Marshal.AllocHGlobal(32);
//32个字节的内容
GetYC_GD(p);
//...读p
System.Runtime.InteropServices.Marshal.FreeHGlobal(p);

------解决方案--------------------
定义
[DllImport("TPalg.dll", CharSet = CharSet.Auto)] 
public static extern int GetYC_GD([MarshalAs(UnmanagedType.LPArray)]byte[] pData);

调用

byte[] pData=new byte[32];

GetYC_GD(System.Text.Encoding.ASCII.GetBytes(pData));