[转][C#]dll 引用

mac2022-06-30  22

本文转自: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

最新回复(0)