分类: C/C++
2008-03-14 15:12:46
///////////////////////////////////////////////////////////////////// // DLL initialization and clean-up. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch(fdwReason) { case DLL_PROCESS_ATTACH: // Perform any DLL initialization here break; case DLL_PROCESS_DETACH: // Perform any DLL cleanup here break; } return TRUE; }为了保证你使用正确的调用规范,要通知编译器使用stdcall规范和/或使用在windows.h(及相关文件)中定义的常量,如WINAPI等。通常DLL的代码如下:
///////////////////////////////////////////////////////////////////// // Shifts bits right for integers. WORD WINAPI vbShiftRight(WORD nValue, WORD nBits) { return (nValue >> nBits); }下一步是创建一个DEF文件,与文档中描述的做法稍有不同。这是防止输出函数名不出现乱字符的有效方式(如_vbShiftRight@1)。DEF文件的形式如下:
Declare Function vbShiftRight Lib "MYDLL.DLL" (ByVal nValue As Integer, ByVal nBits As Integer) As Integer Sub Test() Dim i As Integer i = vbShiftRight(4, 2) Debug.Assert i = 1 End Sub如果你还想要更容易的方法从VB中调用,可以创建一个类型库。为此你需要创建和编译ODL(对象描述语言)文件。这个文件应该包含如下内容:
module MyModule { [ helpstring("Shifts the bits of an integer to the right."), entry("vbShiftRight") ] short _stdcall vbShiftRight([in] short nValue, [in] short nBits); };当VB加载DLL的类型库时,函数名和参数将出现在VB的对象浏览器中。此外,如果用户不输入正确的参数类型,VB将产生一个错误。