VC中调用BCB的LIB?

dengcxsoft 2007-03-27 05:31:52
在BCB中实现一个函数
//=========================================================================
extern "C" int WINAPI TransExcel(char *sReportFile,char *sSheetName,char *sExcelFile)
{
//TXLSReadWriteII2 MyXLSRWII;

MessageBox(NULL,"调用到BCB LIB中的TransExcel函数。","提示",MB_ICONWARNING);

return 1;
}
//=========================================================================
生成DLL后,要在VC中调用这个函数
我用lib /DEF:XLSReadWriteIILib.dll 生成XLSReadWriteIILib.Lib
//=========================================================================
#pragma comment (lib,"XLSReadWriteIILib.lib")
extern "C" int __stdcall TransExcel(char *sReportFile,char *sSheetName,char *sExcelFile);
...
TransExcel("","","");
//=========================================================================
出现以下错误:
XLSREADWRITEIIDEMODoc.obj : error LNK2001: unresolved external symbol _TransExcel
Debug/XLSREADWRITEIIDEMO.exe : fatal error LNK1120: 1 unresolved externals
请高手指教。。。。
...全文
537 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
helenhf 2007-03-28
  • 打赏
  • 举报
回复
加一个__cdecl 再编译,详细规定请参考
http://blog.csdn.net/helenhf/archive/2007/03/16/1531002.aspx
ccrun.com 2007-03-28
  • 打赏
  • 举报
回复
C++Builder和VC的Dll共用的确是一件麻烦事。下面给你举个例子:

C++Builder中,new一个Dll Wizard,不选用VCL,然后添加以下代码(注意导出函数使用的是__cdecl):

// 声明:
extern "C" __declspec(dllexport)
int __cdecl TransExcel(char *sReportFile,char *sSheetName,char *sExcelFile);

// 定义:
int __cdecl TransExcel(char *sReportFile,char *sSheetName,char *sExcelFile)
{
MessageBox(0, sReportFile, sSheetName, 0);
return 0;
}

然后手工建立一个1.def文件,并添加到工程中(Project-->Add to Project):
EXPORTS
TransExcel = _TransExcel

保存工程,并编译,假设生成Project1.dll。

接下来,需要在控制台下生成两个文件:
运行impdef project1.def project1.dll 生成VC使用的project1.def
运行lib /def:project1.def /machine:i386 生成VC使用的project1.lib

在VC中:
// 注意这里的Project1.lib文件路径
#pragma comment (lib,"Project1.lib")
extern "C" int __cdecl TransExcel(char *sReportFile,char *sSheetName,char *sExcelFile);

然后就可以调用了:
TransExcel("文件名称哈哈", "表名。", "保留");



我不懂电脑 2007-03-28
  • 打赏
  • 举报
回复
http://www.mypcera.com/softxue/20073/c/cb/005.htm
dengcxsoft 2007-03-28
  • 打赏
  • 举报
回复
加分求解决方法,解决及给分!
dengcxsoft 2007-03-28
  • 打赏
  • 举报
回复
TO:helenhf(rtos.bigwww.com)
我试过你说的那样,还是不行。

c++builder和vc描述符定义的区别
在c++builder中
__cdecl的函数输出前会带:"_"
__stdcall无特征,只输出函数名
__fastcall函数输出前带:"@"
都无"@nn"后缀格式!
在vc中
__cdecl无特征,只输出函数名
__stdcall的函数输出前会带:"_"后缀带:"@nn"
__fastcall函数输出前带:"@"后缀带:"@nn

我把BCB中用__stdcall,在VC中用__cdecl申明,结果还是一样的错误,始终是函数名变了,到底如何解决,你提供那篇文章也没测试过BCB->VC,哎。。。。恼火啊!

各位大侠帮帮忙,写个简单的测试下。
theLibra12 2007-03-28
  • 打赏
  • 举报
回复
VC和BCB的DLL中函数命名是不一样的。
dengcxsoft 2007-03-28
  • 打赏
  • 举报
回复
哦,谢谢,不管怎么 先谢谢了!
ccrun.com 2007-03-28
  • 打赏
  • 举报
回复
VC可能不能使用BCB的Library,还是用动态链接库的方式吧。
dengcxsoft 2007-03-28
  • 打赏
  • 举报
回复
恩,我的本意是 VC中调用BCB的LIB? 可能是我表达有误,其实我想的就是调用静态LIB。
BCB生成的LIB怎么在VC中调用呢?请指教,万分感谢。
ccrun.com 2007-03-28
  • 打赏
  • 举报
回复
晕。讨论的就是如何在VC中使用BCB的Dll。

如果是调用BCB的静态lib,应该不一样。

首先确认一下,你的BCB工程是new的Library,而不是Dll Wizard吗?
dengcxsoft 2007-03-28
  • 打赏
  • 举报
回复
TO:ccrun(老妖)(www.ccrun.com)
非常感谢!按照你说的已经解决了上午的问题,一会儿给分。

突然发现没有达到要求,这个还是动态的,还是要DLL文件,不然会出错。我希望是在VC中调用静态bcb的LIB,也就是说不要DLL了,如何解决?请大侠指导下。
helenhf 2007-03-27
  • 打赏
  • 举报
回复

//=========================================================================
extern "C" int __cdecl WINAPI TransExcel(char *sReportFile,char *sSheetName,char *sExcelFile)
{
//TXLSReadWriteII2 MyXLSRWII;

MessageBox(NULL,"调用到BCB LIB中的TransExcel函数。","提示",MB_ICONWARNING);

return 1;
}

703

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder ActiveX/COM/DCOM
社区管理员
  • ActiveX/COM/DCOM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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