创建“通用的”动态链接库(DLL)
来源:互联网 发布:smtp.ym.163.com 端口 编辑:程序博客网 时间:2024/05/01 05:24
http://www.vckbase.com/index.php/wv/9
- 文章概要:
- 最近有许多人问如何让动态链接库的输出函数能够被任何支持动态链接库的语言调用。写动态链接库是很EASY的事情。但是,他们大多觉得输出的名字有乱字符(如:_vbShiftRight@1)。本文将讨论如何让DLL输出的函数名字中不出现乱子符。以便让创建的DLL可以在VB中使用。
最近有许多人问如何让动态链接库的输出函数能够被任何支持动态链接库的语言调用。写动态链接库是很EASY的事情。但是,他们大多觉得输出的名字有乱字符(如:_vbShiftRight@1)。本文将讨论如何让DLL输出的函数名字中不出现乱子符。以便让创建的DLL可以在VB中使用。
首先需要实现DLL的入口点函数并保证代码使用 stdcall 调用规范,但这要依赖你使用的编译器。例如,你可以在VC中使用“/entry:"DLLEntry"”命令行编译选项来创建自己的入口点。“DLLEntry” 可以参考下列代码:
01.
/////////////////////////////////////////////////////////////////////
02.
// DLL initialization and clean-up.
03.
BOOL
WINAPI DllMain(
HINSTANCE
hinstDLL,
DWORD
fdwReason,
LPVOID
lpvReserved)
04.
{
05.
switch
(fdwReason) {
06.
07.
case
DLL_PROCESS_ATTACH:
08.
09.
// Perform any DLL initialization here
10.
break
;
11.
12.
case
DLL_PROCESS_DETACH:
13.
14.
// Perform any DLL cleanup here
15.
break
;
16.
17.
}
18.
return
TRUE;
19.
}
为了保证你使用正确的调用规范,要通知编译器使用stdcall规范和/或使用在windows.h(及相关文件)中定义的常量,如WINAPI等。通常DLL的代码如下:
1.
/////////////////////////////////////////////////////////////////////
2.
// Shifts bits right for integers.
3.
WORD
WINAPI vbShiftRight(
WORD
nValue,
WORD
nBits)
4.
{
5.
return
(nValue >> nBits);
6.
}
下一步是创建一个DEF文件,与文档中描述的做法稍有不同。这是防止输出函数名不出现乱字符的有效方式(如_vbShiftRight@1)。DEF文件的形式如下:
EXPORTS
vbShiftRight
下一步是在VB中调用这个函数,使用以下声明:
01.
Declare Function vbShiftRight Lib
"MYDLL.DLL"
(ByVal nValue As Integer,
02.
ByVal nBits As Integer)
03.
04.
As Integer
05.
06.
Sub Test()
07.
Dim i As Integer
08.
i = vbShiftRight(4, 2)
09.
Debug.Assert i = 1
10.
End Sub
如果你还想要更容易的方法从VB中调用,可以创建一个类型库。为此你需要创建和编译ODL(对象描述语言)文件。这个文件应该包含如下内容:
1.
module MyModule {
2.
[
3.
helpstring(
"Shifts the bits of an integer to the right."
),
4.
entry(
"vbShiftRight"
)
5.
]
6.
short
_stdcall vbShiftRight([in]
short
nValue, [in]
short
nBits);
7.
};
当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的创建和使用
- 类变量类方法
- Hint 使用心得
- 警告 incomplete implementation
- 安装VMWare过程中蓝屏了(解决方案)
- oerr 命令的使用
- 创建“通用的”动态链接库(DLL)
- 怎样在xcode里面使用Memory Leaks和Instruments教程
- wmap下的phpnow修改默认站点根目录的方法
- linux shell if else 语法学习
- 爆笑!美女强脱男人裤子,一不小心自己的裤子也被~~~
- 裸机程序-led流水灯
- 一个程序A通过intent调用程序B的Activity
- android 多线程下载 显示进度 速度
- Java issue