本文转自:https://zhidao.baidu.com/question/1176198151354174139.html
首先,对应关系:
C++ C#=====================================WORD ushortDWORD uintUCHAR int/byte 大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyteUCHAR* string/IntPtrunsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)char* stringLPCTSTR stringLPTSTR [MarshalAs(UnmanagedType.LPTStr)] stringlong intulong uintHandle IntPtrHWND IntPtrvoid* IntPtrint intint* ref int*int IntPtrunsigned int uintCOLORREF uint
如果遇到以下错误:
对 PInvoke 函数“Application1!Application1.Win32::Init”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。可以使用属性来解决:
CallingConvention = CallingConvention.Cdecl一般引用 user32.dll 时的属性是:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
转载于:https://www.cnblogs.com/z5337/p/11491933.html