您的位置:首页 > 其它

DAY102_DLL MAKE & USE IN CODEBLOCKS

2016-11-10 19:49 423 查看
TOPIC:

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

创建:

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

         不要选择运行(运行会提示:You must select a host application to "run" a 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
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DLL
相关文章推荐