为什么BCB 调Dll这么麻烦,请大家帮忙看看啊!

yusmt yusmt 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
别人写的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的函数要在许多的窗体调用,所以我想将其定义在一个单元中。代码如下
//头文件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中还是不能正常调用)
我彻底晕了!
...全文
评论 9
收藏 已收藏
分享
返回顶部
yusmt
C++ Builder 13,871 成员 102,696 内容