函数内用malloc分配了空间,所以那个字段也不用你管。你那个dll是成熟可靠的吗?想办法联合调试?
[quote=引用 9 楼 qq_31005577 的回复:] [quote=引用 8 楼 From_TaiWan 的回复:] 能收到结构体信息,说明定义没问题 感觉是内存地址需要固定,这里没有函数的实现,不好判断
[quote=引用 8 楼 From_TaiWan 的回复:] 能收到结构体信息,说明定义没问题 感觉是内存地址需要固定,这里没有函数的实现,不好判断
能收到结构体信息,说明定义没问题 感觉是内存地址需要固定,这里没有函数的实现,不好判断
如果你用Array,那就用public byte[] caccessID;否则用 [MarshalAs(UnmanagedType.LPStr)] public StringBuilder caccessID = new StringBuilder(20); 第二个不确定,要看那函数怎么用的,也有可能是它直接将你的指针指向另一个已存在的变量(地址)
对方用的char*又不是TCHAR* [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)] public string caccessID; 你直接用ByValStr, Charset=Ansi就好了,没必要再用TStr了,要不然WinNT上就是Unicode编码了 还有个就是 [MarshalAs(UnmanagedType.LPStr)] public String cpmessage; 不知道那个API函数是否有分配空间,如果没有,那可能需要调用者负责分配和释放
把dll的api定义和dllimport贴一下, 有助于分析问题
110,533
社区成员
642,574
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧