BCB编写及调用DLL

来源:互联网 发布:苹果手机怎么关闭网络 编辑:程序博客网 时间:2024/06/05 08:04

小工具:

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);
}
//--------------------------------------

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

 

原创粉丝点击