vb制作可输出函数的通用DLL---VB_DLL_Link用法
论坛越来越多人关注dll,特分享一下vb制作可输出
函数的通用DLL---VB_DLL_Link用法
大家知道,VB6只能制作ActiveX DLL文件,制作能输出函数的通用DLL文件通常要用到VC等工具。实际上,VB在编译的时候加以控制,经过适当处理也是可以制作通用DLL的。使用VB_DLL_Link程序就可以利用VB编译出通用的DLL文件,此DLL文件可以被其他程序调用,例如在VB中用Declare语句调用并执行DLL中的函数。下面介绍VB_DLL_Link的使用方法:
1、安装:
本软件为纯绿色软件。下载VB_DLL_Link.exe后,双击它就可以 自动安装了。你也可以手动将它 复制到VB6程序目录下,将原Link.exe改名为Link2.exe,再将VB_DLL_Link.exe改名为Link.exe即可。
2、生成DLL:
安装好VB_DLL_Link后,打开VB6,新建标准exe工程,工程菜单>>移除Form1,添加一个标准模块如Module1.bas,首先向其中写入DLL的入口 代码:
Function DLLMain(ByVal hInstDLL As Long,ByVal fdwReason As Long,ByVal lpwReserved As Long) As Long
DLLMain = 1
End Function
注意参数形式一定要正确,否则编译失败。高级编程时这些参数很有用。在首次调用DLL和调用DLL的原程序退出时均会执行DLLMain函数。这个函数是必须的。
为了使VB不报错,还需加入以下代码:
Sub Main()
'确保VB能编译
End Sub
然后就可以向Module1.bas中写入自定义函数代码了,如:
Function Add(ByVal A As Double,ByVal B As Double) As Double
MsgBox A + B
Add = A + B
End Function
Private Sub M(s As String)
MsgBox s,vbInformation
End Sub
编写好代码后,保存工程,选择文件菜单>>生成exe,注意将文件扩展名改为.dll,否则本软件不能调出。然后本程序就会运行,出现一个对话框提示选择此工程需要导出的函数所在的模块文件,此例即Module1.bas,选择好后本程序主窗口会列出Module1.bas中所有的函数名。如果有多个模块,可以选择"从模块添加"按钮继续添加函数名。"添加函数名"按钮可手动添加现存的函数的名称。然后勾选需要导出的函数名,点击"编译为能输出函数的DLL"按钮,即可编译出通用DLL文件了,它能输出函数列表中打勾的所有函数。若不需要编译为通用DLL,请点击"常规编译"或按Esc键。
3、应用DLL:
编译好的通用DLL文件,可按常规DLL文件的调用方法加以调用。如上述的例子在VB中调用方法如下(请将Lib后的字符串改为上面编译的Dll文件名):
Private Declare Function Add Lib "编译好的DLL文件的路径及名称" (ByVal A As Double,ByVal B As Double) As Double
Private Declare Sub M Lib "编译好的DLL文件的路径及名称" (s As String)
Private Sub main()
Add 9,2 '调用DLL中的函数
M StrConv("By 同济黄正",vbUnicode) '字符串需转换成Unicode再传递
End Sub
大家知道,VB6只能制作ActiveX DLL文件,制作能输出函数的通用DLL文件通常要用到VC等工具。实际上,VB在编译的时候加以控制,经过适当处理也是可以制作通用DLL的。使用VB_DLL_Link程序就可以利用VB编译出通用的DLL文件,此DLL文件可以被其他程序调用,例如在VB中用Declare语句调用并执行DLL中的函数。下面介绍VB_DLL_Link的使用方法:
1、安装:
本软件为纯绿色软件。下载VB_DLL_Link.exe后,双击它就可以 自动安装了。你也可以手动将它 复制到VB6程序目录下,将原Link.exe改名为Link2.exe,再将VB_DLL_Link.exe改名为Link.exe即可。
2、生成DLL:
安装好VB_DLL_Link后,打开VB6,新建标准exe工程,工程菜单>>移除Form1,添加一个标准模块如Module1.bas,首先向其中写入DLL的入口 代码:
Function DLLMain(ByVal hInstDLL As Long,ByVal fdwReason As Long,ByVal lpwReserved As Long) As Long
DLLMain = 1
End Function
注意参数形式一定要正确,否则编译失败。高级编程时这些参数很有用。在首次调用DLL和调用DLL的原程序退出时均会执行DLLMain函数。这个函数是必须的。
为了使VB不报错,还需加入以下代码:
Sub Main()
'确保VB能编译
End Sub
然后就可以向Module1.bas中写入自定义函数代码了,如:
Function Add(ByVal A As Double,ByVal B As Double) As Double
MsgBox A + B
Add = A + B
End Function
Private Sub M(s As String)
MsgBox s,vbInformation
End Sub
编写好代码后,保存工程,选择文件菜单>>生成exe,注意将文件扩展名改为.dll,否则本软件不能调出。然后本程序就会运行,出现一个对话框提示选择此工程需要导出的函数所在的模块文件,此例即Module1.bas,选择好后本程序主窗口会列出Module1.bas中所有的函数名。如果有多个模块,可以选择"从模块添加"按钮继续添加函数名。"添加函数名"按钮可手动添加现存的函数的名称。然后勾选需要导出的函数名,点击"编译为能输出函数的DLL"按钮,即可编译出通用DLL文件了,它能输出函数列表中打勾的所有函数。若不需要编译为通用DLL,请点击"常规编译"或按Esc键。
3、应用DLL:
编译好的通用DLL文件,可按常规DLL文件的调用方法加以调用。如上述的例子在VB中调用方法如下(请将Lib后的字符串改为上面编译的Dll文件名):
Private Declare Function Add Lib "编译好的DLL文件的路径及名称" (ByVal A As Double,ByVal B As Double) As Double
Private Declare Sub M Lib "编译好的DLL文件的路径及名称" (s As String)
Private Sub main()
Add 9,2 '调用DLL中的函数
M StrConv("By 同济黄正",vbUnicode) '字符串需转换成Unicode再传递
End Sub
比如下面的问题:
看了你的《vb制作可输出函数的通用DLL---VB_DLL_Link用法》,按照这个方法我生成了lib,dll文件,可是在vc里使用的时候函数的功能并不能实现
我的代码是:
typedef double(*lpAddFun)(double,double);
HINSTANCE hDll;
lpAddFun addFun;
hDll=LoadLibrary("c://project.dll");
if(hDll!=NULL)
{
addFun=(lpAddFun)GetProcAddress(hDll,"Add");
if(addFun!=NULL)
{
double result=addFun(1,2);
CString str;
str.Format("%f",result);
MessageBox(str);
}
}
FreeLibrary(hDll);
我的代码是:
typedef double(*lpAddFun)(double,double);
HINSTANCE hDll;
lpAddFun addFun;
hDll=LoadLibrary("c://project.dll");
if(hDll!=NULL)
{
addFun=(lpAddFun)GetProcAddress(hDll,"Add");
if(addFun!=NULL)
{
double result=addFun(1,2);
CString str;
str.Format("%f",result);
MessageBox(str);
}
}
FreeLibrary(hDll);
double result=addFun(1,2);在这里出错,也就是不能返回值 能告诉我这是怎么回事吗? 最好详细一点!! 还有LIB和DLL放的位置和调用有什么