我最近一直忙于在C#中使用User32.dll中的函数。为此你使用了很多
[ImportDll("User32.dll")]
public static extern void functionName();
如果你开始谷歌搜索如何使用特定的功能,每个人似乎都使用字段错误。当你应该使用哪个领域以及如何知道如何。
字段和说明:
BestFitMapping:在将Unicode字符转换为ANSI字符时启用或禁用最佳拟合映射行为。
CallingConvention:
表示入口点的调用约定。字符集:
指示如何将字符串参数封送到方法并控制名称重整。EntryPoint:指示要调用的DLL入口点的名称或序号。
ExactSpelling:控制DllImportAttribute.CharSet字段是否导致公共语言运行库在非托管DLL中搜索除指定名称之外的入口点名称。
PreserveSig:指示是否直接转换具有HRESULT或retval返回值的非托管方法,或者HRESULT或retval返回值是否自动转换为异常。
SetLastError:指示在从属性方法返回之前被调用者是否调用SetLastError Win32 API函数。
ThrowOnUnmappableChar:启用或禁用在转换为ANSI“?”的不可映射的Unicode字符上抛出异常。字符。
来源:DllImportAttribute Class (System.Runtime.InteropServices)
这是我能找到的关于他们的信息,有人可以解释这些字段以及何时开始。
示例:
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
是否需要SetLastError和CharSet字段,如果它们是什么,它们会怎么做。每个领域都有这个问题。