C#中调用API函数

如题所述

在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
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-13
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.
本回答被提问者采纳

c##怎么调用api函数
在C##中调用API函数可以通过以下步骤完成:首先,确定要调用的API函数的名称、参数和返回类型。这些信息通常可以在API文档中找到。在C##代码中声明要调用的API函数。可以使用外部函数声明,例如:csharp复制代码 [DllImport("kernel32.dll")]public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool...

C#编程中如何调用WIN32 API函数
动态链接库函数使用前必须声明,相对于vb,c#函数声明显得更加罗嗦,前者通过 api viewer粘贴以后,可以直接使用,而后者则需要对参数作些额外的变化工作。动态链接库函数声明部分一般由下列两部分组成,一是函数名或索引号,二是动态链接库的文件名。譬如,你想调用user32.dll中的messagebox函数,我们必须指明...

c#调用api接口
static extern void ...然后直接调用就行了。1.声明要加 extern 2.通常需要用 [DllImport()] 属性来告诉C#从哪个DLL中提取哪个具体的函数 大多数API的C#声明网上都有,能搜索到。

C#怎么调用API 比如要调用这个 ReadProcessMemory 代码该怎么写 不要...
C#中使用该函数首先导入命名空间:[c-sharp] view plaincopyusing System.Runtime.InteropServices;然后写API引用部分的代码,放入 class 内部 [c-sharp] view plaincopy[DllImport("kernel32.dll ")] static extern bool ReadProcessMemory(int hProcess, int lpBaseAddress,out int lpBuffer, int nSize...

C# 中调用 api 函数出错!
你的函数申明都放在命名空间namespace外面了,当然会出错了,应该把申明放到namespace下的类里面,这样就可以了,刚开始从c++转过来是有点不习惯,书上的程序是VS2008的例子么。。。

C#调用API函数VirtualProtectEx总是返回0 这是一个植物大战僵尸的游戏...
DWORD dwProcessId\/\/ 进程标示符 );在输入访问权限时错误 0为默认 dwDesiredAccess 要采用读写权限 PROCESS_VM_READ or PROCESS_VM_WRITE 参数说明:dwDesiredAccess: 指定打开后,该进程的访问权限 PROCESS_ALL_ACCESS 给予进程所有可能允许的权限.PROCESS_DUP_HANDLE允许使用DuplicateHandle函数进行进程句柄的...

c# 调用 win32 API的 SendMessage 函数 ,里面的属性用法?
所以调用时我们很明确要写成 SendMessage(hwndCtrl,BM_GETCHECK,0,0);而它的返回值可以是下边的几个 BST_CHECKED BST_INDETERMINATE BST_UNCHECKED 这个些在winuser.h中有宏定义的,它们本质就是一些整数,只不过这样宏定义以后更容易理解 所以有时候我们就可以用一个if句判断它是不是选中 if(BS...

高分求助:C#中如何调用UpdateResource这个API函数!
cbData:指定lpData中的资源数据数据大小,以字节计数。返回值:如果函数运行成功,返回值为非零;如果函数运行失败,返回值为零。若想获得更多的错误信息,请调用GetLastError函数。注意:应用程序重复使用UpdateResource去改变资源数据。每次UpdateResource调用都要占用系统内部的一个增加、删除、替代的列表,而...

C# VS2008 调用API函数
以下都是调用API的C#例子33.读取ini文件属性\/\/using System.Runtime.InteropServices;\/\/[DllImport("kernel32")]\/\/返回取得字符串缓冲区的长度\/\/private static extern long GetPrivateProfileString(string section,string key, string def,StringBuilder retVal,int size,string filePath);string Section=%%1;string Ke...

c# 调用QQ音乐、酷狗音乐API
            https:\/\/c.y.qq.com\/soso\/fcgi-bin\/client_search_cp?aggr=1&cr=1&flag_qc=0&p=1&n=2&w=九张机             \/\/songmid可以从歌曲信息中取到,filename根据songmid生成。比如,songmid是...

相似回答
大家正在搜