创建“通用的”动态链接库(DLL)
来源:互联网 发布:类似淘宝指数的网站 编辑:程序博客网 时间:2024/05/01 06:24
最近有许多人问如何让动态链接库的输出函数能够被任何支持动态链接库的语言调用。写动态链接库是很EASY的事情。但是,他们大多觉得输出的名字有乱字符(如:_vbShiftRight@1)。我想在这里就讨论一下如何让输出函数的名字中不出现乱子符。
首先,除非你绝对需要使用C++编码,否则我还是推荐使用C来写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将产生一个错误。
- 创建“通用的”动态链接库(DLL)
- 创建“通用的”动态链接库(DLL)
- C#创建自己的DLL(动态链接库)
- VS2008动态链接库(DLL)的创建与导入
- 动态链接库(Win32 DLL的创建和使用)
- VS2008动态链接库(DLL)的创建与导入
- VS2008动态链接库(DLL)的创建与导入
- 创建动态链接库 (DLL)
- 创建动态链接库-访问动态链接库(通用的动态库的创建与访问)
- 动态链接库(DLL)总结---动态链接库的创建与使用(5)
- VS2008动态链接库(DLL)的创建与使用 - 导出类函数的DLL
- 动态链接库(DLL)总结---静态链接库的创建与使用(4)
- 动态链接库(.dll、.lib)与静态链接库(.lib)的创建与使用
- 【VC++DLL动态链接库编程】DLL动态链接库创建(4)
- C# dll的创建与使用(动态链接库的创建和使用)
- DLL:创建和使用动态链接库的步骤 (C++)
- 动态链接库DLL的创建和使用
- 动态链接库DLL的创建和使用
- 如何做才能从dll中导出类
- #pragma的使用
- DLL(Dynamic Link Libraries)
- Win32环境下dll编程原理
- vici mvc开发第三篇——视图和布局
- 创建“通用的”动态链接库(DLL)
- C/C++中动态链接库的创建和调用
- DLL的远程注入技术
- Silverlight与WPF开发人员入门应该知道的十件事
- 360buy android 首页打开网络监控数据分析
- windows里面at命令的用法
- bat文件
- 诺基亚WP7手机界面曝光
- 将一个已经排序好的数组变成height最小的BinaryTree