DWORD=double word
你应该使用long型,而不是int型

解决方案 »

  1.   


    double word表示2个字,即4字节,32位,
    C#中int就是32位,而long在C#中表示64位
      

  2.   

    修正一下DWORD在C++是定义为 unsigned long(32位无符号整型)
    所以在C#里面应该对应是System.UInt32 
      

  3.   

    默认c使用__cdecl的调用约定,需要DllImport里面设置CallingConvention属性为CallingConvention.Cdecl。返回char *当作string的话,.net会认为它应该是通过CoTaskMemAlloc分配的,并且应该由.net释放。你看到的错误就是试图释放这个内存时产生的。所以如果要返回不是CoTaskMemAlloc分配的的或者不希望释放的char *,那么应该使用IntPtr作为返回类型,然后使用 Marshal.PtrToStringAnsi (如果确定使用ansi方式) 来转换成string。
      

  4.   

    谢谢github_22161131,果然是返回值类型的问题,用了INTPtr就好了,已经给分。
    谢谢Z65443344 ,kenfinal  帮助分析,我没有多少分,匀着给你们了~~