首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

调用bpl,该如何解决

2012-03-18 
调用bpl新建一个package#pragma hdrstop#include Unit1.hUSEFORM(Unit1.cpp, Form1)//--------------

调用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中

C/C++ code
extern "C"  __declspec(dllexport)  int     __stdcall TestFun  (int type){    ShowMessage(type);}
[解决办法]
DllEntryPoint这个函数不用你调用,LoadPackage时自动会调用的
[解决办法]
UnloadPackage(fHandle);就可以了

热点排行