VB等语言与C++DLL的通讯

本文详细探讨了VB、Pascal和Fortran如何调用C++编译的DLL,重点讨论了函数调用约定和名字修饰的影响。通过例子展示了不同语言之间的调用约定差异,如C++中的__stdcall和名字修饰,以及如何在VB中使用别名或DEF文件来模拟PASCAL约定。还涵盖了字符串和数组的传递,以及使用AddressOf存储函数指针的方法。
摘要由CSDN通过智能技术生成

VB等语言调用C++DLL

 

       DLL(dynamic-link library)是一个包含一个或多个被编译、链接的函数/模块的文件, 并和调用它的进程分开存

储。当使用者进程启动或运行时,操作系统负责把DLL映射到调用者进程的内存地址空间里。采用DLL技术,可以提高软件模

块的重用性(DLL调用者可以不太关心该DLL是用何种语言写的)并起到保护源代码的目的,同时又能减少最终生成的可执行

文件的大小。

DLL包含一个导出函数表,它包含了函数在DLL内的地址,但当客户程序装入DLL时并不知道要调用的函数地址,它是通

过函数的符号化名字和序号来识别这些函数的。简单的程序通常是一个EXE从一个或多个DLL导入函数。

       C/C++兼具低、高级语言的特点于一身,同时又有别的语言无法取代的特点,因此,C/C++语言写的DLL在处理某些

问题时显的尤为重要。同时由于编译器的不同和其他原因,编译器并未为跨语言调用DLL做太多工作。 

       在讨论VBPascalFortran)中调用C/C++DLL前,有必要先谈一下函数调用约定(Function Calling

Convention)和名字修饰(Name Decoration)。

1 函数调用约定(Function Calling Convention

 

       函数调用约定确定一个程序如何实现一个函数调用及参数如何传递。在单一语言

程序中,调用约定几乎总是正确的,这是因为对所有模块总有一个缺省的约定并且头文件会负责调用和被调用程序之间的一

致性。在一个混合语言程序中,不同的语言不可能分享同一个头文件。由于调用约定而产生的错误在编译时无法发现,直到

程序在运行时(run-time)实现函数调用时才出现并会立即导致应用程序崩溃。

       VC++所支持的调用约定如下表:

关键字

栈的维护者

参数传递

__cdecl

调用者

参数反序入栈(->)

__stdcall

被调用者

参数反序入栈(->)

__fastcall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值