温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

使用C++Builder写DLL文件的过程详述

发布时间:2020-06-16 07:02:42 来源:网络 阅读:916 作者:nbaluoshibin 栏目:编程语言

    打开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);
}

 

总结:注意属性栏的属性设置。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI