加载dll时出错!

freefeel 2002-05-10 04:48:37
[Linker Error] Unresolved external '_MinusNum' referenced from E:\SOURCE\TEST\UNIT1.OBJ
import type library 选中生成的.dll文件,确定,说是不能正确加载。
...全文
117 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCLIS 2002-05-10
  • 打赏
  • 举报
回复
DLL编译完成后,进入DOS提示符,运行IMPLIB YOUR.LIB YOUR.DLL会生成YOUR.LIB文件,将这个文件加入到你新的程序的PROJECT中,则编译时不会有错误, 运行时, 必须能够找到YOUR.DLL文件。

这样的DLL调用为静态调用,如果是动态调用,则会在用到DLL中的相应的函数时才会去找相应的DLL,静态调用则在程序开始时即查找,如果找不到,就会提示“找不到相应的YOUR.DLL“。
freefeel 2002-05-10
  • 打赏
  • 举报
回复
那是什么东东?好好看看书先!
superaf 2002-05-10
  • 打赏
  • 举报
回复
干脆动态调用,又方便,内存又耗的小;
LoadLibrary(Your.dll);
GetProcAddress(“”,“”);
。。。。
FreeLibrary("Your.dll")
freefeel 2002-05-10
  • 打赏
  • 举报
回复
在呀
gongshutao 2002-05-10
  • 打赏
  • 举报
回复
DLL文件在不在调用它的那个工程的目录里面?如果不在copy过去或者放到path种指定的目录下
freefeel 2002-05-10
  • 打赏
  • 举报
回复
调用程序的unit1.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit3->Text=IntToStr(MinusNum(StrToInt(Edit1->Text),StrToInt(Edit2->Text)));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{

}
//---------------------------------------------------------------------------
unit1.h

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
extern "C" __declspec(dllimport) int PlusNum(int x,int y);
extern "C" __declspec(dllimport) int MinusNum(int x,int y);
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TComboBox *ComboBox1;
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
freefeel 2002-05-10
  • 打赏
  • 举报
回复
生成dll的文件unit1.cpp
#include <vcl.h>
#include <windows.h>
#pragma hdrstop


#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
extern "C" __declspec(dllexport) int PlusNum(int x,int y)
{
return x+y;
}
extern "C" __declspec(dllexport) int MinusNum(int x,int y)
{
return x-y;
}

freefeel 2002-05-10
  • 打赏
  • 举报
回复
project1.cpp中增加了
USELIB("..\add\Project1.lib");
这就是添加以后变动
然后编译,没有出错信息,出现汇编的那个窗口。
gongshutao 2002-05-10
  • 打赏
  • 举报
回复
把dll的project编译,会生成一个扩展名为lib的文件
把DLL,和头文件,和这个文件copy到你的要调用这个DLL的project目录下
在CB菜单选择project-〉Add to Project,在弹出来的对话框中选那个lib文件,就可以了。
513 2002-05-10
  • 打赏
  • 举报
回复
点加入工程,选择.lib-》选择你要的-》选择Ok
你的名字改一下吧,只是个建议
freefeel 2002-05-10
  • 打赏
  • 举报
回复
我不知道怎么加,刚开始学,我的dll的project和调用程序的project不在一个目录下。
gongshutao 2002-05-10
  • 打赏
  • 举报
回复
把DLL生成的lib文件加入到这个工程里面

13,825

社区成员

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

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