炫彩界面库论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3753|回复: 0

c++builder调用VC的dll

[复制链接]
  • TA的每日心情
    开心
    2022-1-9 18:18
  • 发表于 2012-4-13 22:22:37 | 显示全部楼层 |阅读模式
    c++builder调用VC的dll:
    在VC中编写DLL时,使用了.def文件,在出口函数声明时也在前面加上了__declspec(dllexport)说明。把VC生成的DLL文件放在了当前目录下,使用BCB的命令行工具implib生成的.lib文件,具体格式为implib bcb.lib vc.dll,再把implib根据dll生成的LIB文件加入到工程中,再在工程中加入DLL出口函数的声明(函数名前加上了WINAPI,即__stdcall;每个函数定义的最前面也加上了__declspec(dllimport))。
    而且由于BCB和VC++成立函数名转换的做法不同。所以在VC中最好是输出函数为C函数的DLL,如果输出函数是C++类,则可能无法调用。
    我的解决办法(经过本人实验证明的,共2种)
    方法1:VC编译c文件生成dll时导出函数头文件加上extern "C"{}关键字,函数声明和定义处再加调用约定描述符__cdecl,然后将函数声明和定义处都加上一个下划线就没有问题了。
    EXAMPLE:
    假设我VC的dll中包含int myFunction(void),.c文件中函数实现处的正确写法是:
    __declspec(dllexport) int __cdecl _myFunction(void)
    {
              // add your code here
    }
    .h文件中函数声明处的正确写法如下
    __declspec(dllexport) int __cdecl _myFunction(void);
    BCB调用时只要包含lib文件,具体操作步骤:
    运行implib bcb.lib vc.dll
    project->add to...下拉框中选择.lib类型,打开刚才通过implib和vc的dll生成的lib文件
    在工程中用到dll的.c源文件中包含该dll的头文件
    调用时直接写 int i = myFunction(); 即可。

    方法2:仅对VC编译C文件生成dll时有效,导出函数头文件加上extern "C"{}关键字。BCB的Project->option->advanced compiler下的Calling convention中选择Stdcall就可以直接调用VC的.c文件编译生成的动态链接库了。

    --------------------------------------------------
    以上资料来源于网络.


    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    QQ|Archiver|手机版|小黑屋|炫彩界面库 ( 鄂ICP备2023014763号-1 )

    GMT+8, 2024-4-19 08:35 , Processed in 0.074539 second(s), 22 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表