VB.net调用VC DLL(二)

参考文献5,讲了在C程序中直接调用DLL和lib的函数方法,不是通过编译器连接方式

也讲了在非C程序中直接调用DLL和lib的函数方法。

实操了一下,建了win32dll项目

新建.h文件和.cpp文件

.h文件中加:

void __stdcall funcA(double* dB, double* dL);

.cpp文件中加:

void __stdcall funcA(double* dB, double* dL)

{

}

新建.def文件

LIBRARY

EXPORTS

funcA @16

funcA后面有个空格,@后面是参数的字节数,8+8=16

编译生成了dll,放在system32下,

在VBA7下调用,

Private Declare PtrSafe Sub funcA Lib "libA.dll" (ByRef dB As Double, ByRef dL As Double)

调用函数,找不到dll,真是太奇怪了。

VBA给出的提示如下:

加载 DLL 时的错误(错误 48)
动态链接库 (DLL) 就是在 Declare 语句的 Lib 子句中所指定的库。此错误有以下的原因和解决方法:

此文件并非可执行的 DLL。
如果此文件是正文源文件,它必须编译并链接成可执行的 DLL 形式。

此文件并非 Microsoft Windows DLL。
取得此文件相应的 Microsoft Windows DLL 版。

此文件是早期的 Microsoft Windows DLL,而且和 Microsoft Windows 保护方式不兼容。
取得更新的版本。

此 DLL 引用到其他不存在的 DLL。
取得此被引用的 DLL 并让它能提供其他 DLL 使用。

此 DLL 或所引用的 DLL 并不在所指定的目录中。
移动 DLL 到所引用的目录或将 DLL 所在的目录添加到路径中。

详细信息,可选取有问题的项目,并按下 F1 (在Windows中)或HELP(在Macintosh中)键。

猜测可能是dll不是64位,重新生成64的dll,替换之前的32位 dll

函数成功调用

1、https://bbs.csdn.net/topics/390248432

2、vs开发遇到的问题之MSI未能注册模块 xxx.dll。HRESULT -2147024770。请与你的技术支持人员联系。_未能注册模块请与技术人员联系-CSDN博客

3、VBA如何调用动态链接库dll文件VBA如何调用动态链接库dll文件_微软技术-CSDN问答

4、模块已加载,但找不到入口点DLLRegisterServer[通俗易懂]-腾讯云开发者社区-腾讯云

5、https://www.cnblogs.com/dusty-cjh/p/8253526.html

相关推荐
专注VB编程开发20年21 小时前
C#全面超越JAVA,主要还是跨平台用的人少
java·c#·.net·跨平台
一个帅气昵称啊1 天前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
.net·efcore·仓储模式
helloworddm1 天前
CalculateGrainDirectoryPartition
服务器·c#·.net
步步为营DotNet1 天前
深度剖析.NET中HttpClient的请求重试机制:可靠性提升与实践优化
开发语言·php·.net
ChaITSimpleLove1 天前
使用 .net10 构建 AI 友好的 RSS 订阅机器人
人工智能·.net·mcp·ai bot·rss bot
专注VB编程开发20年1 天前
vb.net宿主程序通过统一接口直接调用,命名空间要一致
服务器·前端·.net
ChaITSimpleLove2 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
用户4488466710602 天前
.NET进阶——深入理解线程(2)Thread入门到精通
c#·.net
一个帅气昵称啊2 天前
.Net——AI智能体开发基于 Microsoft Agent Framework 实现第三方聊天历史存储
人工智能·microsoft·.net