#pragma once
#ifdef DLLMSG_EXPORTS
#define DLLMSG_API __declspec(dllexport)
#else
#define DLLMSG_API __declspec(dllimport)
#endif
class DLLMSG_API CDealAppMsg
{
public:
CDealAppMsg(void){};
virtual ~CDealAppMsg(void){};
void dispatchMsg(WORD v_imsgType,DWORD wParam,DWORD lParam);
void SndMsgData2App(int v_imsgDirection,DWORD v_dwCmd,void *v_pDat,int v_dwLen);
void SndMsgReg2App(int v_imsgDirection,DWORD lParam);
private:
void _DealRegMsg(DWORD wParam,DWORD lParam);
void _DealcopyDataMsg(DWORD wParam,DWORD lParam);
HWND _GetAppWnd(int v_imsgDirection);
};
编译出现警告:inconsistent dll linkage
在 工程--属性--配置属性--c/c++--预处理器--预处理定义, 增加DLLMSG_API预定义,问题就可以解决了。(这个问题比较低级,作者是初用c++,所以才出现这种状况)
代码依赖于是否定义了DLLMSG_API来决定宏展开为__declspec(dllexport)还是__declspec(dllimport)
展开为__declspec(dllexport)是DLL编译时的需要,通知编译器该函数是需要导出供外部调用的。
展开为__declspec(dllimport)是给调用者用的,通知编译器,该函数是个外部导入函数。
对于工程设置里面的预定义宏,是最早被编译器看到的。所以当编译器编译DLL工程时,因为看到前面有工程设置有定义DLLMSG_API,所以就把PREDLL_API展开为__declspec(dllexport)了。
这样做的目的是为了让DLL和调用者共用同一个h文件,在DLL项目中,定义MYDLL_EXPORTS,PREDLL_API就是导出;在调用该DLL的项目中,不定义MYDLL_EXPORTS,PREDLL_API就是导入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。