vb制作可输出函数的通用DLL---VB_DLL_Link用法

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放的位置和调用有什么
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值