在VC下可以调用BCB的静态链接库吗?
如果可以,请您详细的说一下。
谢谢
问题点数:100、回复次数:23Top
1 楼xycleo()虚竹和尚()回复于 2001-05-03 11:26:00 得分 30
可以阿!!!
静态调用时:Microsoft所使用的格式是COFF格式的LIB档,而Borland所使用的格式是OMF格式的LIB档。若是你的LIB档是要给Visual C++ 链结用的,那就要使用它所附的IMPLIB.EXE,在使用时不可不察。因此我们可用以下指令产生DLLSAMP.LIB档。
IMPLIB DLLSAMP.LIB DLLSAMP.DLL
Top
2 楼matrix2000(我要学InfoPath)回复于 2001-05-03 11:48:00 得分 0
你的意思是说用BCB做一个动态的连接库先。然后使用IMPLIB导出一个VC能用的静态LIB吗?
BTW:如果我在build这个dll时就带进所有的dll和BPL,那么以后在VC里Build完后是不是可以不用BCB的东东了吧。Top
3 楼xycleo()虚竹和尚()回复于 2001-05-03 12:02:00 得分 0
你说的好复杂!!没试过!!Top
4 楼wizardmao(天涯)回复于 2001-05-03 12:08:00 得分 5
关注Top
5 楼wizardmao(天涯)回复于 2001-05-03 12:11:00 得分 0
:)Top
6 楼Wingsun(孙春阳)回复于 2001-05-03 15:18:00 得分 20
是啊,当然拉,不过有一点就是,你要保证你的DLL不需要BCB的任何bpl的支持,也就是静态完全连接.
还有就是你的lib文件格式一定是要VC的格式.就向他们说的那样.Top
7 楼matrix2000(我要学InfoPath)回复于 2001-05-03 18:57:00 得分 0
不行呀,我用BCB生成了一个dll, 再implib,结果VC显示
d:\bcb\bcb4\pro.lib : fatal error LNK1136: invalid or corrupt file
unit.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
//---------------------------------------------------------------------------
// Important note about DLL memory management when your DLL uses the
// static version of the RunTime Library:
//
// If your DLL exports any functions that pass String objects (or structs/
// classes containing nested Strings) as parameter or function results,
// you will need to add the library MEMMGR.LIB to both the DLL project and
// any other projects that use the DLL. You will also need to use MEMMGR.LIB
// if any other projects which use the DLL will be performing new or delete
// operations on any non-TObject-derived classes which are exported from the
// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,
// the file BORLNDMM.DLL should be deployed along with your DLL.
//
// To avoid using BORLNDMM.DLL, pass string information using "char *" or
// ShortString parameters.
//
// If your DLL uses the dynamic version of the RTL, you do not need to
// explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------
#include "file1.h"
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
int __stdcall test(int a,int b)
{
return a+b;
}
//---------------------------------------------------------------------------
file1.h
int __stdcall test(int a,int b);
编译生成project2.dll
然后implib pro.lib project2.dll
生成的pro.lib放在vc的Link下,结果出现上述错误。
我使用implib -a pro.lib project2.dll生成的也不行。
???
Top
8 楼zhangming(zm)回复于 2001-05-03 19:13:00 得分 10
直接用LIB转VC的LIB 试试看!Top
9 楼matrix2000(我要学InfoPath)回复于 2001-05-03 19:14:00 得分 0
直接用LIB转VC的LIB ,什么意思?
我不是想在BCB用VC的LIB,而是在VC里用BCB的LIB呀!Top
10 楼matrix2000(我要学InfoPath)回复于 2001-05-03 20:15:00 得分 0
使用IMPLIB生成的新的lib到底是COFF 还是OMF,我是用coff2omf.exe转换时发现不论怎样使用implib转化,它生成的都是omf的,到底应该怎样使用BCB生成一个COFF格式的LIB呢?Top
11 楼matrix2000(我要学InfoPath)回复于 2001-05-04 08:59:00 得分 0
刷新Top
12 楼matrix2000(我要学InfoPath)回复于 2001-05-04 18:13:00 得分 0
各位大侠,小弟的意思是这样的。
我本想在VC里面调用BCB的静态链接库(不是静态调用BCB的动态链接库),因为在BCB中调用bmp,jpg的图形非常方便。可是我看到大家回复的意思好像还是先做一个Dll,然后从里面用implib导出一个lib让 VC调用,可是这样不就是VC静态调用BCB的动态链接库了吗?这与我直接想把一个静态的LIB链接到EXE文件的目的相悖了。
我使用VC的dependency walker察看那个lib,显示d:\bcb\bcb4\PRO.LIB No dos signature found,this file is not a valid Win32 moudle.于是我使用BCB提供的implib左转右变,VC也不认这个lib。是不是implib无法导出一个VC能用的Lib呀。
请您再帮忙给找点这方面的资料。
谢谢。Top
13 楼kabob(kk.Chen)回复于 2001-05-05 03:22:00 得分 5
关注!!
TNND,Borland和Microsoft就不能兼容一下吗?Top
14 楼yeqiufeng(叶秋枫)回复于 2001-05-05 08:37:00 得分 5
@_@Top
15 楼xycleo()虚竹和尚()回复于 2001-05-05 09:41:00 得分 0
不对阿!!!!是用vc的implib.exe工具来把bcb的dll专成lib!!!让vc调用
Top
16 楼matrix2000(我要学InfoPath)回复于 2001-05-05 10:01:00 得分 0
是这样。
我再试试。
3ks先。Top
17 楼matrix2000(我要学InfoPath)回复于 2001-05-05 10:09:00 得分 0
等一等。虚竹兄。
VC没有提供implib呀,我装的也够全了。倒是有一个Lib.exe,是它吗?
如果是,可否告知怎么用。Top
18 楼xycleo()虚竹和尚()回复于 2001-05-05 10:10:00 得分 0
不好意思,vc 我也没试过
可能帮不了你啦!!
不过vc没有implib吗????Top
19 楼songhtao(三十年孤独)回复于 2001-05-05 13:10:00 得分 25
你看看《创世纪的C++Builder》说得很详细Top
20 楼songhtao(三十年孤独)回复于 2001-05-05 13:12:00 得分 0
vc里确实没有implib但《创世纪的C++Builder》解决了这个问题。Top
21 楼matrix2000(我要学InfoPath)回复于 2001-05-05 15:24:00 得分 0
给分了,谢谢各位。
看来VC只能调用BCB的动态链接库,而不能链接静态的LIB了。Top
22 楼ThinkX(秋天的树)回复于 2001-05-05 18:36:00 得分 0
用implib时,dll必须是标准的库,应加上extern "C"吧Top
23 楼matrix2000(我要学InfoPath)回复于 2001-05-05 21:21:00 得分 0
加了。Top




