为什么BCB 调Dll这么麻烦,请大家帮忙看看啊!
别人写的DLL,有头文件,有VC的lib文件,就是没有办法正确调用。
我首先使用静态调用,方法如下.
1.将LIB文件 add to project
2.#include "MyDll.h";
后编译出错,提示 contains invalid OMF record, type 0x21 (possibly COFF)
然后我上网查,说要使用implib MyDll.lib MyDll.dll 导出的LIB
之后我使用implib导出了LIB并放在当前路径下
编译又报错
[Linker Error] Unresolved external 'ShowForm()' referenced from c:\a\UNIT1.OBJ
有点晕了
然后我使用动态调用,但因为这个dll的函数要在许多的窗体调用,所以我想将其定义在一个单元中。代码如下
之后在窗体中调用,但是会出错
void __fastcall TForm1::FormCreate(TObject *Sender)
{
loadDll();
ShowForm(Edit1->Text.c_str());
}[/code]
但是将源文件中的代码放在窗体Unit1单元中执行一次就没有问题,可以正常使用,这是什么原因?(虽然在窗体1中可以正常使用,但在窗体2中还是不能正常调用)
我彻底晕了!
我首先使用静态调用,方法如下.
1.将LIB文件 add to project
2.#include "MyDll.h";
后编译出错,提示 contains invalid OMF record, type 0x21 (possibly COFF)
然后我上网查,说要使用implib MyDll.lib MyDll.dll 导出的LIB
之后我使用implib导出了LIB并放在当前路径下
编译又报错
[Linker Error] Unresolved external 'ShowForm()' referenced from c:\a\UNIT1.OBJ
有点晕了
然后我使用动态调用,但因为这个dll的函数要在许多的窗体调用,所以我想将其定义在一个单元中。代码如下
//头文件Unit2.h里
//---------------------------------------------------------------------------
[code=C/C++]
#ifndef Unit2H
#define Unit2H
#include <StdCtrls.hpp>
char * _stdcall (*ShowForm)(char *);
double (*Add)(double x ,double y);
void loadDll();
HINSTANCE hInst=NULL;
//---------------------------------------------------------------------------
#endif
//源文件Unit2.h里
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
void loadDll()
{
hInst = LoadLibrary("MyDll.DLL");
if(hInst)
{
(FARPROC &)ShowForm=GetProcAddress(hInst,"ShowForm" );
(FARPROC &)Add=GetProcAddress(hInst,"Add" );
}
else
{
// MessageBox(Handle,"无法加载DllServer.dll文件","信息提示",MB_OK);
FreeLibrary(hInst);
}
}之后在窗体中调用,但是会出错
void __fastcall TForm1::FormCreate(TObject *Sender)
{
loadDll();
ShowForm(Edit1->Text.c_str());
}[/code]
但是将源文件中的代码放在窗体Unit1单元中执行一次就没有问题,可以正常使用,这是什么原因?(虽然在窗体1中可以正常使用,但在窗体2中还是不能正常调用)
我彻底晕了!
...全文
相关推荐
BCB调用VC的DLL
BCB调用VC的DLL
BCB调用VC的DLL里的方法,即看即会。
BCB调用VC的DLL里的方法,很简单,对于新人来说,可以很简单的学会怎样调用,里面写了简单的注释,很容易看懂。
BCB编写DLL详细过程及Demo
最近学习用BCB编写DLL,搞了一头雾水,今天终于搞定,把自己的学习过程用图文并茂的方式分享给大家,希望大家少走弯路。文档包括DLL创建Demo,说明文档,使用DLL Demo
BCB由DLL生成LIB及def文件方法
BCB由DLL生成LIB及def文件方法,而非转换VC的lib文件,这样生成的lib文件包含DLL中函数最全,
BCB调用matlab的dll的方法总结
使用BCB编写的软件,调用Matlab生成的dll,实现Borland C++ Builder与matlab的混合编程,这是一个demo的文档,可以参考


