只有dll的情况下如何动态调用里面的类成员函数

跨语言调用DLL实战
本文介绍了一种特殊场景下跨语言调用第三方DLL的方法,针对C编写的类成员函数,详细讲述了如何绕过Java JNA及JNI限制,通过VB进行中间层封装,最终实现从后端接口调用加解密函数的过程。
因为项目的需求需要在后台接口中调用项目方提供的dll加解密库,根据已知信息不知道dll里面封装使用了什么算法所以只能硬生生的调用dll里面的函数来进行加解密,如果后台接口使用java编写的话可以通过直接加载dll库通过jna的方式来进行调用,但是加解密函数是一个C写的类成员函数,意思是说必须先实例化一个类才能调用里面的加解密函数,但是java通过jna方式的话不能调用dll中的类成员函数,只能调用外部函数,如果通过jni的方式来调用C++,然后C++来调用dll的话,C++必须采用静态链接dll才行,意思是必须具备dll文件、.lib文件以及.h申明文件三者不可缺一,但是项目需求的话只提供了dll文件,所以这种方式也不行,最终通过千辛万苦搜集资料查找发现可以在vb中通过svr32注册dll的方式来直接引用里面的CEncrypt类,然后实例化一个类后就可以调用里面的加解密函数了,然后再把vb中调用dll的函数再封装成dll(切记vb在封装dll的时候会访问注册表,所以必须以管理员权限运行vb环境,否则会生成失败,就算成功后台也没法直接引用)供后台去直接调用,如果后台接口用C#写的话可以直接以引用的方式添加刚才封装的dll,我试过如果不通过vb封装做转接直接引用那个最原始的dll的话会引用失败。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值