CorelDRAWX4的VBA插件开发(二十七)使用C++制作动态连接库DLL辅助VBA构键强大功能-(1)前言和准备工作

  • 我们在使用VBA的时候会很多的局限性,包括调用库和递归函数,对指针结构体和类都不友好,对时间复杂度和空间复杂度都优化得不够,换言之VB就不是从性能出发的语言,所以难免力不从心

  • 所以这里用C++为VBA做DLL(动态链接库). 可能有的小伙伴就要问了,直接给CDR做动态链接库不是直接了当吗? 是的,直接给CDR做基于MFC的动态链接库是很好,但是纯C++很麻烦,费时间,要编译,要重启CDR,要找BUG, 而同样的功能VBA大部分可以实现,所以我只在核心的对性能有要求的只有C++才能方便实现的功能上使用C++. 简而言之就是VBA能容易做到就用VBA,复杂部分用C++. 这样结合是很合理很轻松的方式.有图有真相,先上图:
    在这里插入图片描述

  • 使用半VBA半C++的方式有哪些优点呢?

  • 1构思节省时间

  • 2能做强大功能

  • 3避开全体编译

  • 4用VBA调用C++天经地义,两种并行各取所长

  • 5测试DLL过程中无需重启CDR --对使用CDR工作中的人非常友好,

  • 使用LoadLibrary动态调用DLL的方式比静态调用declare的方式更加灵活,内存在使用完DLL之后即对这个文件进行释放,方便随时升级更新动态链接库.这也是第5条得以实现的原因.

当然毫无基础的同学也同样可以照做,因为只要你代码写对了就可以实现,不需要全部理解,好了废话不多说了,下面开始准备工作:

  1. 首先需要一个C++工作环境,也就IDE集成开发环境,各有所好,推荐使用VS2019社区版,英文全称Microsoft Visual Studio Community 2019.社区版是免费的只要登陆就可以正常使用,不要下载专业版要收费的哦,记得安装完成之后安装组件就对照我下面的图片即可 具体过程实在不熟悉的朋友可以去百度一下专门介绍安装问题的.
    在这里插入图片描述
  • 后面这张单个组件中的v142是如果你要用纯C++开发插件必装的组件,你可装可不装,为了避免出现问题就装一下吧, Help Viewer是开发者手册,里面的手册能装尽量全部装了,这样有问题一搜比较好找问题.
    在这里插入图片描述
  • 好了你只要把这个装好了就可以进入下一步了

为了避免平台限流我还是把刚才GIF里面的代码上一下,以下代码可以不用看

Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long

Public Sub Command1_Click()
    On Error Resume Next
    Dim lb As Long, pa As Long
    
    lb = LoadLibrary("c:\cine\CongLingKaiShi_YinYong.dll") '加载动态连接库
    pa = GetProcAddress(lb, "WoDeDll")  '取得库中的函数地址
    pa = CallWindowProc(pa, ByVal VarPtr(CorelDRAW.Application), ByVal CorelDRAW.Windows.Item(1).Handle, ByVal 0&, ByVal 0&)   '调用函数并传入四个参数
    FreeLibrary lb  '释放

End Sub

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值