c++builder XE 调用 vc6.0的dll

u010687066 2013-05-21 02:25:40
c++ builder环境Embarcadero RAD Studio XE
已使用implib.exe -a D:\testdll_vs2010.lib D:\\testdll_2.lib生成新的lib文件,make和build已通过,但是运行时说"找不到dll_add_vc6.lib".

vc头文件dll_add_vc6.h
#ifndef DLL_ADD_VC6_H

#define DLL_ADD_VC6_H
extern "C" _declspec(dllexport) int Add_vc6(int a, int b);

#endif

vc文件dll_add_vc6.cpp
#include"dll_add_vc6.h"
#include <stdio.h>

int Add_vc6(int a, int b)
{
int c = a + b;
return c;
}

编译生成的dll_add_vc6.lib和dll_sdd_vc6.dll复制后放到bcb所在的文件夹中,用implib.exe -a testdll_vs2010.lib testdll_2.lib重新生成的lib文件添加到bcb工程中。
c++builder文件
#include "dll_add_vc6.h"
#include <vcl.h>
#pragma hdrstop
#include "Unit_testdll_3cpp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
extern "C" __declspec(dllexport) int Add_vc6(int a, int j);
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
int a = StrToInt(Edit4->Text);
int b = StrToInt(Edit5->Text);
int c = Add_vc6(a, b);
Edit6->Text = IntToStr(c);
}
...全文
145 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010687066 2013-05-21
  • 打赏
  • 举报
回复
引用 6 楼 ccrun 的回复:
楼主接触Windows编程多久了? 你的dll文件,要么放在和exe同一个目录下,要么放在Path变量包含的路径中。 lib文件只在链接的时候有用,生成EXE文件以后,只需要DLL了。
新手上路,请多包涵。 dll文件之前是放在.cbproj和.cpp所在文件夹中,刚刚改到Debug文件夹里了,可以了,谢谢。
ccrun.com 2013-05-21
  • 打赏
  • 举报
回复
楼主接触Windows编程多久了? 你的dll文件,要么放在和exe同一个目录下,要么放在Path变量包含的路径中。 lib文件只在链接的时候有用,生成EXE文件以后,只需要DLL了。
u010687066 2013-05-21
  • 打赏
  • 举报
回复
引用 4 楼 ccrun 的回复:
[quote=引用 3 楼 u010687066 的回复:]
依旧不行,任然是找不到dll文件


意料中事。

implib的参数用完整路径名再试,先成功生成lib文件,然后将lib加入到工程中。[/quote]

完整路径还是不行,我把原来的lib从工程里移除保存后重新打开,
把implib.exe -a dll_add_vc6.lib dll_add_vc6.dll做成.bat后放在文件加中执行生成的新lib文件添加到工程中,也不行。
ccrun.com 2013-05-21
  • 打赏
  • 举报
回复
引用 3 楼 u010687066 的回复:
依旧不行,任然是找不到dll文件
意料中事。 implib的参数用完整路径名再试,先成功生成lib文件,然后将lib加入到工程中。
u010687066 2013-05-21
  • 打赏
  • 举报
回复
引用 2 楼 ccrun 的回复:
首先Implib的用法是: implib.exe -a lib文件名 dll文件名 然后 extern "C" __declspec(dllexport) int Add_vc6(int a, int j); 改成: extern "C" __declspec(dllimport) int Add_vc6(int a, int j);
依旧不行,任然是找不到dll文件
ccrun.com 2013-05-21
  • 打赏
  • 举报
回复
首先Implib的用法是: implib.exe -a lib文件名 dll文件名 然后 extern "C" __declspec(dllexport) int Add_vc6(int a, int j); 改成: extern "C" __declspec(dllimport) int Add_vc6(int a, int j);
缘中人 2013-05-21
  • 打赏
  • 举报
回复
静态调用dll方式, lib文件要添加到工程里吧 http://blog.csdn.net/amy0428/article/details/4197982

13,870

社区成员

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

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