|
使用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文档 |
|