请教用VC调用BCB开发的DLL?

fallegend 2002-03-12 11:53:17
想用BCB开发界面,用VC调用,不知可行否?
...全文
260 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fallegend 2002-03-13
  • 打赏
  • 举报
回复
在BCB中新建DLL,加入一个Form
加入代码:
#ifndef _SHOWIMG_H_
#define _SHOWIMG_H_
#ifndef IMGDLL
#define EXTERN __declspec(dllimport)
#else
#define EXTERN __declspec(dllexport)
#endif
extern "C" EXTERN void __stdcall ShowF(void);
#endif

void _export _stdcall ShowF(void)
{
Form1 = new TForm1(NULL);
Form1->ShowModal();
delete Form1;
}

在VC中加入调用代码显示FORM:
void CVcdlltestDlg::OnButton1()
{
void (*ShowF)(void);
HINSTANCE hInst;
hInst = LoadLibrary("test.DLL");
(FARPROC &)ShowF=GetProcAddress(hInst,"ShowF");
ShowF();
FreeLibrary(hInst);
// TODO: Add your control notification handler code here

}
测试通过
kingcaiyao 2002-03-12
  • 打赏
  • 举报
回复
当然,可以,在写函数时可以用__stdcall,也可以用__cdecl。不过接下来调用,就要注意,很多朋友出问题都在这里,动态调用就没有什么,三个函数:LoadLibrary,GetProcAddress,FreeLibrary,静态调用因为需要将.lib加入到项目中,因为VC生成的LIB格式与BCB的LIB格式不同,因此需要转换,可以用implib来进行转换,如果你在VC中写输出函数时,用__cdecl,那么就应该带一个参数implib -a *.lib *.dll,如果用__stdcall就不用带-a参数,即:implib *.lib *.dll

要么你使用coff2omf
ddeng 2002-03-12
  • 打赏
  • 举报
回复
字符串参数传递时得用char *,不能用AnsiString,VC不认识!
另外DLL生成以后,在VC中若要静态连接就得用VC的工具重新生成LIB文件,BCB生成的LIB文件VC中是不能使用的。
greatefish 2002-03-12
  • 打赏
  • 举报
回复
当然可以!
要注意的是:
1:在写DLL的export部分时一定要用 __stdcall修饰符
2:因为在BCB中兼容很多PASCAL语法,如__fastcall等修饰符号,
在开发DLL for vc时一定要避免使用这些东西.
ddeng 2002-03-12
  • 打赏
  • 举报
回复
当然要,要用Borland的implib导出LIB。
wangxd 2002-03-12
  • 打赏
  • 举报
回复
同意楼上的。不过用vc开发的dll在bcb中静态连接时,用不用用bcb的implib重新生成lib文件?

13,826

社区成员

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

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