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

相关文章

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

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

电脑提示Winmm.dll缺失怎么办? Winmm.dll文件丢失的多种修复技巧

《电脑提示Winmm.dll缺失怎么办?Winmm.dll文件丢失的多种修复技巧》有时电脑会出现无法启动程序,因为计算机中丢失winmm.dll的情况,其实,winmm.dll丢失是一个比较常见的问... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包