C++ Builder中创建与调用动态库文件小结
来源:互联网 发布:中级程序员2018 编辑:程序博客网 时间:2024/06/03 21:35
C++ BUILDER 中创建DLL文件:
在工程中新建DLL WIZARD项目;
选择C++与VCL及VC++
在DLL工程中声明DLL文件的输出函数
extern "C" __declspec(dllexport) TYPE FUNCTIONNAME(TYPE PARAMETERS,...);
实现函数体
如有DATA MODULE需要进行初始化
如:
if(dm==NULL) Application->CreateForm(__classid(TDmeOperationApply), &DmeOperationApply);
并在DATA MODULE中将其初始值设为NULL
如:TDmeOperationApply *DmeOperationApply=NULL;
示例:
void CreateDme(void);
extern "C" __declspec(dllexport) bool InStart(void * ADOConnection); //输出函数声明
#pragma argsused
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
bool InStart(void * ADOConnection)
{
try{
CreateDme();
DmeOperationApply->ADOConnection1=(TADOConnection *)ADOConnection;
TForm * pForm =new TFormMain(NULL);
pForm->ShowModal();
delete pForm;
return true;
}
catch(Exception &e){
Application->ShowException(&e);
return false;
}
}
//初始化DM
void CreateDme(void)
{
if ( DmeOperationApply == NULL )
Application->CreateForm(__classid(TDmeOperationApply), &DmeOperationApply);
}
C++ BUILDER 中DLL文件动态调用:
声明DLL文件的声明函数
如:bool (*InStart)(void *);
自定义类型:
如:typedef bool (*InStartp)(void *);
定义DLL实例(全局)
如:HINSTANCE h_dll;
示例:
bool (*InStart)(void *); //声明DLL文件的声明函数
//typedef
typedef bool (*InStartp)(void *);//自定义类型
void __fastcall FormatErrorMsg()
{
LPVOID lpMsgBuf;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL
);
// Display the string.
MessageBox( NULL,(LPCSTR) lpMsgBuf, "GetLastError", MB_OK|MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}
//---------------------------------------------------------------------------
__fastcall TFormCallMain::TFormCallMain(TComponent* Owner)
: TForm(Owner)
{
h_dll = NULL;
InStart = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TFormCallMain::FormShow(TObject *Sender)
{
if(h_dll==NULL)
h_dll = LoadLibrary("OperationApply.dll");
if(h_dll){ // (bool (*InStart)(void*))
InStart=(InStartp)::GetProcAddress(h_dll,"_InStart");//在调用函数名前加“_”
if(InStart) InStart(ADOConnection1);
else{
FormatErrorMsg();
return;
}
}
else{
FormatErrorMsg();
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormCallMain::FormDestroy(TObject *Sender)
{
if (h_dll != NULL ){
FreeLibrary(h_dll);
}
}
//---------------------------------------------------------------------------
void __fastcall TFormCallMain::Button1Click(TObject *Sender)
{
::CoInitialize(NULL);
InStart(ADOConnection1);
::CoUninitialize();
}
- C++ Builder中创建与调用动态库文件小结
- C++中动态链接库文件创建与调用
- 在C++Builder中动态创建控件
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C/C++中动态链接库的创建和调用
- C++文件中通过动态链接库调用C文件
- c++builder 动态创建控件及销毁
- Go中调用C的动态库与静态库
- BCB(C++ Builder)创建动态库(DLL,接口导出和调用),动态加载DLL
- c++builder 调用tinyXML读写XML文件
- C++ 动态库创建与调用
- 在DataGrid 中如何实现返回被单击的单元格的行号和列号(两个同时返回)
- 三层架构理论
- 抽象工厂模式
- ASP 2.0 数据绑定函数Eval()的机制
- 未公开的Openlaszlo应用打印功能
- C++ Builder中创建与调用动态库文件小结
- struts开发—分页的实现
- 在ASP中,FSO的超强能力!
- Struts+Spring+Hibernate 分析
- ASP.NET 2.0 的内部变化
- Precisely control page and element backgrounds with CSS
- 正则表达式 解析
- Qt/Embedded 2.3.10 到PXA270上的移植
- Java线程