调用bpl
新建一个package
#pragma hdrstop
#include "Unit1.h"
USEFORM("Unit1.cpp", Form1);
//---------------------------------------
#pragma package(smart_init)
//---------------------------------------
// Package source.
//---------------------------------------
#pragma argsused
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
{
if (reason == 1)
{
Form1 = new TForm1(Application);
}
return 1;
}
然后新建一个工程 调用
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned int fHandle = LoadPackage("Package1.bpl");
if(fHandle)
{
//運行包中的函數
typedef PACKAGE void __stdcall TMyFun(HINSTANCE hinst, unsigned long reason, void*);
TMyFun* MyFun= (TMyFun*)GetProcAddress((HINSTANCE)fHandle, "DllEntryPoint");
if(MyFun)
MyFun((HINSTANCE)fHandle, 1, NULL);
}
}
得不到函数地址。。
何解。。
[解决办法]
你的DllEntryPoint和TMyFun的定义不同,DllEntryPoint没有__stdcall修饰么
你在bpl中再新增一个函数实现那些功能,然后在程序中再调用。
[解决办法]
bpl中
extern "C" __declspec(dllexport) int __stdcall TestFun (int type){ ShowMessage(type);}
[解决办法]
DllEntryPoint这个函数不用你调用,LoadPackage时自动会调用的
[解决办法]
UnloadPackage(fHandle);就可以了