vb制作可输出函数的通用DLL---VB_DLL_Link用法
发布时间:2020-12-16 23:13:45 所属栏目:大数据 来源:网络整理
导读:vb制作可输出函数的通用DLL---VB_DLL_Link用法 论坛越来越多人关注dll,特分享一下vb制作可输出 函数 的通用DLL---VB_DLL_Link用法 大家知道,VB6只能制作ActiveX DLL文件,制作能输出函数的通用DLL文件通常要用到VC等工具。实际上,VB在编译的时候加以控制
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
比如下面的问题:
看了你的《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);
double result=addFun(1,2);在这里出错,也就是不能返回值 能告诉我这是怎么回事吗? 最好详细一点!! 还有LIB和DLL放的位置和调用有什么
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |