本文转自:https://zhidao.baidu.com/question/1176198151354174139.html
首先,对应关系:
C++ C#
=====================================
WORD ushort
DWORD uint
UCHAR int/byte 大部分情况都可以使用int代替,而如果需要严格对齐的话则应该用bytebyte
UCHAR* string/IntPtr
unsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
char* string
LPCTSTR string
LPTSTR [MarshalAs(UnmanagedType.LPTStr)] string
long int
ulong uint
Handle IntPtr
HWND IntPtr
void* IntPtr
int int
int* ref int
*int IntPtr
unsigned int uint
COLORREF uint
如果遇到以下错误:
对 PInvoke 函数“Application1!Application1.Win32::Init”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。
可以使用属性来解决:
CallingConvention = CallingConvention.Cdecl
一般引用 user32.dll 时的属性是:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
手机扫一扫
移动阅读更方便
你可能感兴趣的文章