查看: 459  |  回复: 0
  打通任督二脉:VB6.0的ActiveX DLL或exe调用VC6.0的DLL,含dll参数加密,VB调试vbDLL,VC调试vcDLL
楼主
发表于 2023年3月20日 16:26

打开VC6.0,新建空白dll文件vbdll.cpp和vbdll.def,这里的dll是纯dll,是非COM组件,无需注册,内容如下:
【vcdll.cpp】

具体代码只能由VIP查看,请升级

【vcdll.def】

具体代码只能由VIP查看,请升级

然后Ctrl+F7再F7生成vbdll.dll(可能需要先生成Debug,才能再生成Release),此文件在Debug文件夹中(有524KB,如果发布到Release,就只有44KB,推荐用Release方式),拷贝到vb目录c:\testvb\vbdll。
有人问:用这种方式有什么意义?用处大了,对于速度要求很快的操作,可以用C++的dll做函数,C++的算法和代码比VB多了去了,比如加密算法、编码(比如Base64、MD5编码)、股票格式数据文件读取(用指针方式高速读取不同位置的信息)。并且这种dll是纯dll,无需Regsrv32注册,太方便了。还可以被很多编程语言调用,比如在服务器的ASP调用。
现在给出VB6.0的解决方案:
如果每次生成VB的DLL,然后重新运行IIS调试DLL会很麻烦。直接用VB的From1调试吧。
原理:双工程【vbdll】+【工程1】,让【vbdll】工程启动,在【工程1】中,引用“vbdll.vbp”从而调用【vbdll】的类模块“ClassFun”的子程序如“f_add(...)”。按F8单步运行,也可以按F5直接运行。
在VB目录c:\testvb\vbdll放你原来的dll工程。
1. 在VB6.0中打开原有dll工程(dll工程名:vbdll)。如果要生成dll,请点击工程【vbdll】才有生成dll的选项,不过我们这里不用生成dll文件,因为我们先在代码里面调试好再生成。
在VB6.0左上角的 文件->添加工程->标准exe->打开 创建了【工程1】,在自动生成的 Form1 窗体。对【工程1】鼠标右键“设置为启动”,这样运行这个组就是exe运行了,虽然没生成exe。
2. 在 工程1里面的Form1 窗体里 添加2个TextBox输入框(命名txt1和txt2)和2个Command1控件(命名cmdTest_Click和cmdTest2_Click)测试dll的子程序,Form1.frm内容如下它的代码如下:

具体代码只能由VIP查看,请升级

注意:ClassFun 为 dll(工程:vbdll)里的一个类模块名。
注意:工程1.引用位置->浏览->找到本文件下的->vbdll.vbp (注意引用对话框中的:文件类型为:所有文件(*.*))->打开->确定
3. 对【工程1】设为启动,这样在VB运行的时候就是Form1的代码。
4. 文件->生成 工程组 保存 名字:组1。
VB6.0启动,需要双击 组1.vbg 才行,而不是单独的工程。
ClassFun.cls的代码:

具体代码只能由VIP查看,请升级

对于VS2022写的DLL那几行,可以先删除了,如果要在VB6.0中调用VS2022的DLL,代码较多,请看 《VB6.0调用VS2022的C++写的DLL,网上很多错的,这里才是最简单的:一定要采用DEF文件

1楼
发表于 2023年3月20日 16:28

顺便给大家下【C语言数据类型在VisualBasic中声明为调用时使用的表达式】

   ATOM ByVal variable As Integer 结果为Integer 类型的表达式

   BOOL ByVal variable As Long 结果为 Long 类型的表达式

   BYTE ByVal variable As Byte 结果为 Byte 类型的表达式

   CHAR ByVal variable As Byte 结果为 Byte 类型的表达式

   COLORREF ByVal variable As Long 结果为 Long 类型的表达式

   DWORD ByVal variable As Long 结果为 Long 类型的表达式

   HWND, HDC, HMENU ByVal variable As Long 结果为 Long 类型的表达式等Windows 句柄

   INT, UINT ByVal variable As Long 结果为 Long 类型的表达式

   LONG ByVal variable As Long 结果为 Long 类型的表达式

   LPARAM ByVal variable As Long 结果为 Long 类型的表达式

   LPDWORD variable As Long 结果为 Long 类型的表达式

   LPINT, LPUINT variable As Long 结果为 Long 类型的表达式

   LPRECT variable As type 自定义类型的任意变量

   LPSTR, LPCSTR ByVal variable As String 结果为 String 类型的表达式

   LPVOID variable As Any 任何变量(在传递字符串的时候使用ByVal)

   LPWORD variable As Integer 结果为Integer 类型的表达式

   LRESULT ByVal variable As Long 结果为 Long 类型的表达式

   NULL As Any 或 ByVal Nothing 或

   ByVal variable As Long ByVal 0& 或 VBNullString

   SHORT ByVal variable As Integer 结果为Integer 类型的表达式

   VOID Sub procedure 不可用

   WORD ByVal variable As Integer 结果为Integer 类型的表达式

   WPARAM ByVal variable As Long 结果为 Long 类型的表达式


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com