DAY102_DLL MAKE & USE IN CODEBLOCKS

TOPIC:

           动态链接库在codeblocks上的创建和使用


创建:

         新建工程,工程类型选择动态链接库,完成之后自动生成基本两个文件(一个头文件,一个CPP文件)。简单的功能架构以及要在哪里声明,哪里写实现,怎么写,这些在自动生成的文件中都已经有了,那这样你写出来你想要的动态链接库就很容易了。

         不要选择运行(运行会提示:You must select a host application to "runa library.),这里进行编译。然后到工程bin文件里边去找生成的DLL文件。


使用:

        举个栗子

           //load dll
            HINSTANCE ***dll;
            char _filepath[200] = {};
            getcwd(_filepath,200);
            strcat(_filepath,"\\_***dll.dll");
            ***dll = LoadLibrary(_filepath);
            if(***dll==NULL)
            {
                FreeLibrary(***dll);
                return -1;
            }

            //get function  "***Enter"是dll的导出函数
            typedef void (* dll***Enter)();  //最前面的*是函数指针
            dll***Enter ***Enter;
            ***Enter = (dll***Enter) GetProcAddress(***dll,"***Enter");
            if(***Enter==NULL)
            {
                FreeLibrary(***dll);
                return -1;
            }

            //execute function,get"start!"
            try{
                ***Enter();
            }catch(exception e){
                cout<<"exception:execute function occur error";
            }
            FreeLibrary(***dll);
           

addition:

创建时候也可以自定义dll加载和撤销时候要执行的事件,这个需要你来自修改DLLMain函数内容。

栗子:

//DllMain
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            cout<<"ATTACHKDLL Initializing!\n";
            break;

        case DLL_PROCESS_DETACH:
            // detach from process 进行清理工作
            cout<<"DETACHDLL Terminating!\n";
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}


  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值