BCB调用VC++生成的dll问题

key_leung 2020-05-04 03:45:57
各位好,我需要利用BCB静态调用VC++生成的dll,网上很多帖子方法,主要都是利用 implib.exe 对 dll 文件生成lib,然后就可以调用了,但是我试了都不行,请各位赐教一下。

//--------------------------
//VCDllTest1.cpp 文件内容
//------------------------

#include "stdafx.h"
#include "VCDllTest1.h"

int add(int a, int b)
{
return a + b;
}

//--------------------------
//VCDllTest1.h 文件内容
//------------------------

#pragma once

extern "C" _declspec(dllexport)int add(int a, int b);

在VS2015生成VCDllTest1.dll及VCDllTest1.lib文件后,创建了另一个新使用程序,静态加载,VS2015程序能使用此链接库。

//--------------------------
//BCB内容
//------------------------
然后转到BCB中(使用BCB6),已利用命令 implib.exe -a VCDllTest1.lib VCDllTest1.dll 生成了BCB调用的lib,并在工程中加载了VCDllTest1.lib,VCDllTest1.dll文件放在了.exe相同目录下了。

//--------------------------
//Unit1.cpp 文件内容
//------------------------

//extern "C" __declspec(dllexport) int add(int a, int b);
extern "C" __declspec(dllimport) int add(int a, int b);

void __fastcall TForm1::btn1Click(TObject *Sender)
{
int a = 2;
int b = 3;

int c = add(a,b);
}

但出现[Linker Error] Unresolved external '_add' referenced from E:\BCBWORK\VCDLLTEST\UNIT1.OBJ的问题,是哪一步错了吗?


...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2020-05-04
  • 打赏
  • 举报
回复
有道理,那个linker error一般都是有函数声明而找不到函数实现。
key_leung 2020-05-04
  • 打赏
  • 举报
回复
引用 3 楼 ooolinux 的回复:
我以前测试过dll是成功的,唯一和你不同的是: extern "C" _declspec(dllexport) int int add(int a, int b) //VC cpp代码 { return a + b; } implib -af abc.lib abc.dll 另外,最好不要用add这种可能冲突的命名,可以用myAdd。
感谢你的回复,你说得对,我在cpp中修改成这样就可以了, //-------------------------- //VCDllTest1.cpp 文件内容 //------------------------ #include "stdafx.h" #include "VCDllTest1.h" _declspec(dllexport) int add(int a, int b) { return a + b; } 之前就是就是cpp与h的函数对应不上
ooolinux 2020-05-04
  • 打赏
  • 举报
回复
另外,注意implib是BCB目录里的那个。
ooolinux 2020-05-04
  • 打赏
  • 举报
回复
引用 3 楼 ooolinux 的回复:
我以前测试过dll是成功的,唯一和你不同的是: extern "C" _declspec(dllexport) int int add(int a, int b) //VC cpp代码 { return a + b; } implib -af abc.lib abc.dll 另外,最好不要用add这种可能冲突的命名,可以用myAdd。
复制粘贴多了一个int 我以前的参考书籍是: C++ Builder高级应用开发指南 作者:李幼仪,甘志编著 Borland C++ Builder 5实用编程技术 朱正茂等编著
ooolinux 2020-05-04
  • 打赏
  • 举报
回复
我以前测试过dll是成功的,唯一和你不同的是: extern "C" _declspec(dllexport) int int add(int a, int b) //VC cpp代码 { return a + b; } implib -af abc.lib abc.dll 另外,最好不要用add这种可能冲突的命名,可以用myAdd。
key_leung 2020-05-04
  • 打赏
  • 举报
回复
引用 1 楼 ooolinux 的回复:
CB什么版本,经典编译器还是clang?
你好,CB是 C++ Builder 6
ooolinux 2020-05-04
  • 打赏
  • 举报
回复
CB什么版本,经典编译器还是clang?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧