C#使用技巧--调用DLL
2024-07-21 02:22:08
供稿:网友
使用c#时不免用调用别的dll,如win32的api和自己以前做的dll,
c#调用dll很像vb,下面讨论的c#调用dll的方式。
看看下面的例子,演示了怎么定义dll函数接口
public class utility
{
[dllimport("kernel32",
entrypoint=”createdirectory”,
callingconvention=callingconvention.stdcall]
public static extern bool create (string name);
[dllimport("user32"]
entrypoint=”messagebox”,
callingconvention=callingconvention.stdcall]
public static extern int msgbox (string msg);
}
class myclass
{
public static int main()
{
string mystring;
console.write("enter your message: ");
mystring = console.readline();
return utility.msgbox(mystring);
}
}
值得注意的是,缺省的调用规则(callingconvention)是stdcall,同winapi,在
c++里是__stdcall的形式,函数入口(entrypoint)缺省是同名,如createdirectory
的定义也可以为
[dllimport("kernel32")]
static extern bool createdirectory(string name, securityattributes sa);
win32 api原型为
bool createdirectory(
lpctstr lppathname, // directory name
lpsecurity_attributes lpsecurityattributes // sd
);
在调用win32 api时注意那些类型的转换,如结构(struct)、指针(pointer),
有关各种语言之间类型转换和dllimport属性的详细信息可以参考sdk文档