您好,登录后才能下订单哦!
打开C++Builder6集成开发界面,选择File-New-Other,弹出New Items对话框,选择DLL Wizard选项,在DLL Wizard对话框中选择Use VCL选项,点击OK按钮。进入界面后,此时工作空间名称和文件名称都是默认的,可以选择File-Save Project As重命名工作空间名称和文件名称等,当你新添加一个文件时,可以使用ctrl+s来重命名。
接下来往这个DLL项目中分别添加Form和Data Module。他们都是在File-New-Form 与 File-New-Data Module中添加,名称重命名可ctrl+s实现。首先添加Data Module,弹出一个界面,在工具栏的BDE一项拖拽Query和Database控件,并设置Database的属性选项中的LoginPrompt为false值,防止弹出登录数据库的界面。
以上都设置好后,还要设置一项,否则调用DLL文件是会报无法加载DLL文件。解决方法:创建DLL时编译链接时注意设置Project Options。Packages标签,去除Builder with runtime packages检查框;Linker标签,去除Use dynamic RTL检查框。其它选项说明,Directories/Conditionals可以设置生成DLL文件的最终路径,如我在Final output中输入../bin/,最后点击OK完成。
下面给出部分接口代码:
(1) DLL端接口代码extern "C" __declspec(dllexport) bool __stdcall SetInstChangeLogInit(AnsiString DBName,TStrings *Params,AnsiString areacode,AnsiString username,TComponent* Owner);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
{
return 1;
}
//---------------------------------------------------------------------------
bool __stdcall SetInstChangeLogInit(AnsiString DBName,TStrings *Params,AnsiString areacode,AnsiString username,TComponent* Owner)
{
//调用窗体的初始化函数,做些初始化操作
}
(2) 主调端接口代码
void __fastcall TFmMain::N33Click(TObject *Sender)
{
ReSet(Sender);
HINSTANCE hld;
bool (*SetInstChangeLogInit)(AnsiString DBName,TStrings *Params,AnsiString cAreaCode,AnsiString userName,TComponent* Owner);
hld=LoadLibrary("setInstChangeLog.dll");
if(hld)
{
(FARPROC &)SetInstChangeLogInit=GetProcAddress(hld,"SetInstChangeLogInit");
if(SetInstChangeLogInit)
{
if(!SetInstChangeLogInit(FmDm->Database1->DatabaseName,FmDm->Database1->Params,FmDm->AreaCode,FmDm->userName,this))
MessageBox(Handle,"模块中的函数执行错误(setInstChangeLog.dll)!!!","错误!",MB_OK|MB_ICONERROR);
}
else
MessageBox(Handle,"模块中的函数无法定位(setInstChangeLog.dll)!!!","错误!",MB_OK|MB_ICONERROR);
}
else
MessageBox(Handle,"此功能没有提供","错误! setInstChangeLog.dll!",MB_OK|MB_ICONERROR);
FreeLibrary(hld);
}
总结:注意属性栏的属性设置。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。