讨教TR@SOE 一个IB的问题
为什么这么慢?我作成了许多个使用IB的dll。
每个dll中使用了一个主窗体,一个DMOD数据模块,
模块中用到控件,我使用了不同的“事务”多个。
运行能够,但是
EXE调用Dll时总很慢,让人很尴尬,即便用Local IB连接
也一样。是不是要个什么样的 连接池 什么的就好了。
//////////////////////////////////////////////////////////////////////////////
在EXE主程序中
void __fastcall Tmain_::ActionSHOWEditSimpleTableExecute(TObject *Sender)
{
try
{
DYNloadDll("DLL13.dll");
}
catch(...)
{
return;
}
}
DYNloadDll如下
void Tmain_::DYNloadDll(AnsiString dllName)
{
HINSTANCE DLLhandle;
try
{
DLLhandle=::LoadLibrary(dllName.c_str());
//典型动载,动载的标志:::LoadLibrary与::FreeLibrary
//不要 Project/Add to Project (“dllName”.lib)
// 动载可能的使用 ::LoadIcon或::LoadString或函数指针和::GetProcAddress
// 这里是 函数指针typedef void(__stdcall* pFvoid_void)()和::GetProcAddress
if(DLLhandle)
{
pFunc=(pFvoid_void)::GetProcAddress(DLLhandle,"ShowMe");
if(pFunc)pFunc();
pFunc=NULL;
}
::FreeLibrary(DLLhandle);
}
catch(Exception &e)
{
ShowMessage(e.ClassName());
ShowMessage(e.Message);
pFunc=NULL;
if(DLLhandle)::FreeLibrary(DLLhandle);
return;
}
}
//////////////////////////////////////////////////////////////////////////////
DLL13.dll是这样做:
入口 DLLEnter.h 如下:
#include "main.h"
#ifndef DLLEnterH
#define DLLEnterH
extern "C" __declspec(dllexport) __stdcall void ShowMe();
#endif
入口 DLLEnter.cpp 如下:
#pragma hdrstop
#include "DLLEnter.h"
#pragma package(smart_init)
void __stdcall ShowMe()
{
Application->CreateForm(__classid(TDMOD_), &DMOD_);
Application->CreateForm(__classid(Tmain_), &main_);
main_->ShowModal();
main_->Free();
DMOD_->Free();
}