API的问题,哪个大侠帮帮忙!

webjerry 2002-12-17 05:49:09
我现在写一个C#程序,需要调用第三方的一个.dll文件提供的函数库,其中一个函数是这样声明的

LPADAPTER PacketOpenAdapter(LPTSTR AdapterName);

这个函数内部用GlobalAlloc函数为返回的LPADAPTER类型指针分配了内存,LPADAPTER类型定义如下:
typedef struct _ADAPTER {
HANDLE hFile;
CHAR SymbolicLink[MAX_LINK_NAME_LENGTH];
int NumWrites;
HANDLE ReadEvent;
UINT ReadTimeOut;
} ADAPTER, *LPADAPTER;


C#中限制了指针的使用,我没有办法声明出这样的结构,那位大侠告诉我这个函数我应该怎么调用?
...全文
30 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
梁苏彬 2003-01-02
  • 打赏
  • 举报
回复
多谢知秋一叶大侠,这个帖子是我朋友帮我问的,请到我自己的帖子里领分
这个帖子我也会叫我朋友给你分的

请在下面这个帖子里回复一次,我好给分
http://expert.csdn.net/Expert/topic/1258/1258714.xml?temp=.3981897
qqchen79 2002-12-19
  • 打赏
  • 举报
回复
private const int MAX_LINK_NAME_LENGTH = ...;

[StructLayout(LayoutKind.Sequential)] //add PackSize if necessary
struct ADAPTER {
IntPtr hFile;
[MarshalAs(UnmanagedType.ByValArray, SizeConst=MAX_LINK_NAME_LENGTH)]
byte[] SymbolicLink;
int NumWrites;
IntPtr ReadEvent;
uint ReadTimeOut;
}

[DllImport("youdll.dll")] //change CharSet if you are using ANSI (without define UNICODE).
public extern static IntPtr PacketOpenAdapter(string AdapterName);

...
IntPtr ptr = PacketOpenAdapter("whatever");
ADAPTER adt = Marshal.PtrToStructure(ptr);
Marshal.FreeHGlobal(ptr); //don't forget to free the memory
...
梁苏彬 2002-12-18
  • 打赏
  • 举报
回复
up

111,117

社区成员

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

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

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