关于C#调用 win32的DLL,如何调用指针呢?

yardloun 2012-03-29 09:14:51
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之类的句子啊,大侠
...全文
111 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyd0018030 2012-03-30
  • 打赏
  • 举报
回复
定义
[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));

只在此山中 2012-03-30
  • 打赏
  • 举报
回复
用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);

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧