C#调用C语言的DLL DWORD=double word你应该使用long型,而不是int型 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 double word表示2个字,即4字节,32位,C#中int就是32位,而long在C#中表示64位 修正一下DWORD在C++是定义为 unsigned long(32位无符号整型)所以在C#里面应该对应是System.UInt32 默认c使用__cdecl的调用约定,需要DllImport里面设置CallingConvention属性为CallingConvention.Cdecl。返回char *当作string的话,.net会认为它应该是通过CoTaskMemAlloc分配的,并且应该由.net释放。你看到的错误就是试图释放这个内存时产生的。所以如果要返回不是CoTaskMemAlloc分配的的或者不希望释放的char *,那么应该使用IntPtr作为返回类型,然后使用 Marshal.PtrToStringAnsi (如果确定使用ansi方式) 来转换成string。 谢谢github_22161131,果然是返回值类型的问题,用了INTPtr就好了,已经给分。谢谢Z65443344 ,kenfinal 帮助分析,我没有多少分,匀着给你们了~~ 在进行调试时,输入了数据,但在输出结果的时候,窗口突然消失了!但用逐步调试的时候却没有什么问题?求解!! 关于文件流操作的怪现象 关于fileWatcher和委托的使用(急) 如何通过.net的编译后的dll,中有注释 vista 与 VS2005有兼容问题吗? 做Windows安装程序时遇到奇怪的问题 讨论下 怎么用C#做个qq聊天工具 两次保存的问题??? 请问其它文件如何调用主窗体中的控件? C# float转String如何保留实际小数位数 请问如何判断数据库,存在某一列 3DES FlushFinalBlock() 不正确的数据。
double word表示2个字,即4字节,32位,
C#中int就是32位,而long在C#中表示64位
所以在C#里面应该对应是System.UInt32
谢谢Z65443344 ,kenfinal 帮助分析,我没有多少分,匀着给你们了~~