C#中调用API函数

2024-12-01 20:30:09
推荐回答(2个)
回答1:

在C#中经常需要调用一些API函数,那么怎样才能正确的调用API函数呢,如下
一、调用API格式
//引用此名称空间,简化后面的代码
usingSystem.Runtime.InteropServices;
...
//使用DllImportAttribute特性来引入api函数,注意声明的是空方法,即方法体为空。
[DllImport("user32.dll")]
publicstaticexternReturnTypeFunctionName(typearg1,typearg2,...);
可以使用字段进一步说明特性,用逗号隔开,如:
[DllImport("kernel32",EntryPoint="GetVersionEx",SetLastError=true)]
DllImportAttribute特性的几个公共字段如下:

1、CallingConvention:指示向非托管实现传递方法参数时所用的CallingConvention值。
CallingConvention.Cdecl:调用方清理堆栈。它使您能够调用具有varargs的函数。
CallingConvention.StdCall:被调用方清理堆栈。它是从托管代码调用非托管函数的默认约定。
2、CharSet:控制调用函数的名称版本及指示如何向方法封送String参数。
此字段被设置为CharSet值之一。如果CharSet字段设置为Unicode,则所有字符串参数在传递到非托管实现之前都转换成Unicode字符。这还导致向DLLEntryPoint的名称中追加字母“W”。如果此字段设置为Ansi,则字符串将转换成ANSI字符串,同时向DLLEntryPoint的名称中追加字母“A”。大多数Win32API使用这种追加“W”或“A

回答2:

EnumFontFamilies
The EnumFontFamilies function enumerates the fonts in a specified font family that are available on a specified device.

Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should use the EnumFontFamiliesEx function.

int EnumFontFamilies(
HDC hdc, // handle to DC
LPCTSTR lpszFamily, // font family
FONTENUMPROC lpEnumFontFamProc, // callback function
LPARAM lParam // additional data
);
Parameters
hdc
[in] Handle to the device context.
lpszFamily
[in] Pointer to a null-terminated string that specifies the family name of the desired fonts. If lpszFamily is NULL, EnumFontFamilies selects and enumerates one font of each available type family.
lpEnumFontFamProc
[in] Point to the application definedcallback function. For information, see EnumFontFamProc.
lParam
[in] Pointer to application-supplied data. The data is passed to the callback function along with the font information.
Return Values
The return value is the last value returned by the callback function. Its meaning is implementation specific.