正文

创建“通用的”动态链接库(DLL)--VCKBASE2007-11-08 19:13:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lym51/30822.html

分享到:

创建通用的动态链接库(DLL

VCKBASE

    最近有许多人问如何让动态链接库的输出函数能够被任何支持动态链接库的语言调用。写动态链接库是很EASY的事情。但是,他们大多觉得输出的名字有乱字符(如:_vbShiftRight@1)。本文将讨论如何让DLL输出的函数名字中不出现乱子符。以便让创建的DLL可以在VB中使用。
   
首先需要实现DLL的入口点函数并保证代码使用 stdcall 调用规范,但这要依赖你使用的编译器。例如,你可以在VC中使用“/entry:"DLLEntry"”命令行编译选项来创建自己的入口点。“DLLEntry” 可以参考下列代码:

/////////////////////////////////////////////////////////////////////

// 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文件的形式如下:

EXPORTS
vbShiftRight

下一步是在VB中调用这个函数,使用以下声明:

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将产生一个错误。

阅读(2860) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册