VB.net调用VC DLL

2024-06-10 23:36
文章标签 dll 调用 net vb vc

本文主要是介绍VB.net调用VC DLL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数的修饰名?参考文献12

.DEF导出和__declspec(dllexport)的优缺点?参考文献11

1、__declspec(dllexport)

可以使用 __declspec(dllexport) 关键字从 DLL 中导出数据、函数、类或类成员函数。

尝试导出已修饰的 C++ 函数名称时,这种便利性最为明显。

生成 DLL 时,通常会创建一个包含要导出的函数原型和/或类的头文件,并将 __declspec(dllexport) 添加到头文件中的声明内。

若要指定 C 链接,请为函数声明指定 extern "C"

2、 DEF 文件 (*.def)

模块定义或 DEF 文件 (*.def) 文件是文本文件,其中包含一个或多个描述 DLL 的各种特性的模块语句。 如果没有使用 __declspec(dllexport) 关键字来导出 DLL 的函数,则 DLL 需要 DEF 文件。

LIBRARY BTREE

EXPORTS

Insert @1

Delete @2

Member @3

Min @4

如果使用 MFC DLL 向导创建 MFC DLL,则向导将为你创建主干 DEF 文件,并自动将它添加到项目中。 添加要导出到此文件的函数的名称。 对于非 MFC DLL,请自己创建 DEF 文件并将它添加到项目。 然后转到“项目”>“属性”>“连接器”>“输入”>“模块定义文件”,并输入 DEF 文件的名称。

如果要导出 C++ 文件中的函数,则必须将修饰名放置在 DEF 文件中,或使用 extern "C" 通过标准 C 链接定义导出函数。

3、VB.net调用VC DLL

若要使 Visual Basic 应用程序(或诸如 Pascal 或 Fortran 等其他语言编写的应用程序)调用 C/C++ DLL 中的函数,必须使用正确的调用约定导出函数,而无需编译器进行任何名称修饰

__stdcall 为函数创建正确的调用约定(被调用的函数会清理堆栈,且参数从右向左传递),但以不同方式修饰函数名称。因此,当对 DLL 中的已导出函数使用 __declspec(dllexport) 时,导出修饰名。

__stdcall关键字将使限定(extern "C" )无效
如果没有添加__stdcall关键字,那么函数调用约定为C调用约定。如果加了__stdcall标准调用约定,就是WINAPI调用约定,也就是pascal调用约定,这种约定与C调用约定不一样。
如果EXPORTS下的函数个数多时,方式为:

LIBRARY “dlll”
EXPORTS
ADD
SUB
MUL

因为无法替代发生堆栈清理的位置,所以必须使用 __stdcall。 若要使用 __stdcall 取消修饰名称,必须通过在 .def 文件的 EXPORTS 部分中使用别名来指定它们。

__stdcall 名称修饰使用下划线字符 () 作为符号名称的前缀,并向符号追加 at 符号 (@),后跟参数列表中的字节数(所需堆栈空间)

对于以下函数声明,这会显示如下

int __stdcall MyFunc (int a, double b);

void __stdcall InitCode (void);

在 .DEF 文件中:
EXPORTS
   MYFUNC=_MyFunc@12
   INITCODE=_InitCode@0

别名和@参数都是可选的

若要使 Visual Basic 编写的程序可调用 DLL,.def 文件中需要本主题中所示的别名技术。 如果别名在 Visual Basic 程序中完成,则不需要在 .def 文件中使用别名。

参考文献

1、https://www.cnblogs.com/hdsong/p/5683960.html

2、VB如何调用DLL_vba dll vb-CSDN博客

3、https://www.cnblogs.com/dtblog/p/4847737.html

4、https://wenku.csdn.net/answer/2x4fr7yuov

5、在VB中调用C/C++语言编写的dll,数组参数的传递_vb调用外部dll type 传参-CSDN博客

6、VB.net中调用C\C++ 的DLL_vb6 调用c++ net 调用c++-CSDN博客

7、用VC开发API形式的DLL给VB调用的范例_vc6使用c语言编写dll给vb6调用-CSDN博客

8、使用 DEF 文件从 DLL 导出 | Microsoft Learn

9、使用 __declspec(dllexport) 从 DLL 导出 | Microsoft Learn

10、导出 C++ 函数以用于 C 语言可执行文件 | Microsoft Learn

11、确定要使用的导出方法 | Microsoft Learn

12、DLL导出函数名称改编的解决方法_修改dll导出函数名称-CSDN博客


 

这篇关于VB.net调用VC DLL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049588

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

qt5cored.dll报错怎么解决? 电脑qt5cored.dll文件丢失修复技巧

《qt5cored.dll报错怎么解决?电脑qt5cored.dll文件丢失修复技巧》在进行软件安装或运行程序时,有时会遇到由于找不到qt5core.dll,无法继续执行代码,这个问题可能是由于该文... 遇到qt5cored.dll文件错误时,可能会导致基于 Qt 开发的应用程序无法正常运行或启动。这种错

电脑提示xlstat4.dll丢失怎么修复? xlstat4.dll文件丢失处理办法

《电脑提示xlstat4.dll丢失怎么修复?xlstat4.dll文件丢失处理办法》长时间使用电脑,大家多少都会遇到类似dll文件丢失的情况,不过,解决这一问题其实并不复杂,下面我们就来看看xls... 在Windows操作系统中,xlstat4.dll是一个重要的动态链接库文件,通常用于支持各种应用程序

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现