小工具:
implib.exe 命令行生成*.lib文件
tdump.exe 命令行生成 导出函数列表。
impdef.exe 命令行生成 导出函数定义、别名
编写:
//----------------------------------------------------------------------------------------
extern "C" __declspec(dllexport) __stdcall int myAdd(int,int); //声明导出的函数
extern "C" __declspec(dllexport) __stdcall AnsiString aboutMe(void); //声明导出的函数
int add(int n1,int n2);
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
return 1;
}
//---------------------------------------------------------------------------
__declspec(dllexport) __stdcall int myAdd(int x,int y)
{
return add(x,y);
}
__declspec(dllexport) __stdcall AnsiString aboutMe()
{
return "oh,it's me!";
}
int add(int n1,int n2)
{
return n1+n2;
}
//---------------------------------------------------------------------------------------------------
静态调用:
//-----------------------------------------------------------------------------------------------
准备工作:把*.dll 和*.lib放入工程目录,并把*.lib add to project
extern "C" __declspec(dllimport) __stdcall int myAdd(int,int); //声明导入的函数
extern "C" __declspec(dllimport) __stdcall AnsiString aboutMe(void); //声明导入的函数
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ShowMessage(aboutMe()); //和调用自己在当前程序中定义的函数一样。
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit3->Text=IntToStr(myAdd(StrToInt(Edit1->Text),StrToInt(Edit2->Text)));
}
//---------------------------------------------------------------------------------------
动态调用:
//---------------------------------------------------------------------------------------
int __stdcall (*myAdd)(int,int); //声明调用的函数
String __stdcall (*aboutMe)(void);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
HINSTANCE Hinst; //声明一个DLL句柄
FARPROC Hp; //声明一个函数句柄
Hinst=LoadLibrary("MyDll.dll");//将DLL文件赋值为文件句柄
Hp=GetProcAddress(Hinst,"aboutMe"); //获得函数地址
aboutMe=(String __stdcall (__cdecl *)(void))Hp; //将内存地址强制转换为函数
ShowMessage(aboutMe());
FreeLibrary(Hinst); //释放文件句柄
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HINSTANCE Hinst;
FARPROC Hp;
Hinst=LoadLibrary("MyDll.dll");
Hp=GetProcAddress(Hinst,"myAdd");
myAdd=(int __stdcall (__cdecl *)(int,int))Hp;
Edit4->Text=IntToStr(myAdd(StrToInt(Edit2->Text),StrToInt(Edit3->Text)));
FreeLibrary(Hinst);
}
//--------------------------------------
//---------------------------------------------------------------------------------------