MFC调用dll,该如何处理
MFC调用dll
RT
我需要用C++封装一个播放器(dll),在需要用的地方单独去调用。现在出现几个问题:
1、如果我把播放器作为应用程序来实现,这里没有问题;而且在这个工程里面新建窗口,再调用播放器窗口,也没有问题
2、如果将播放器封装为dll,新建一个项目,在这个项目中调用dll,我是通过接口来实现的
接口如下:
这段代码,在当前项目中测试没有问题。(在别的地方调用就有问题)
3、在新项目中是这么调用的
现在很郁闷,网上查了很多资料,都不知道怎么处理,发个帖子,望高手给予答复,多谢。
备注:如果不作为dll来使用的话,这个播放器所在项目运行均没有问题,我在想肯定是调用接口的时候哪里出现问题。
因为分不多,见谅了,本来就没有几分。
------解决思路----------------------
这应该是DLL的资源问题,看你这个调用好像是要初始化一个Dlg,应该是把对话框的资源文件打进动态库里了,你搜一下相关的资料吧,我很久以前碰到过,具体怎么弄倒是忘了,就是调用个什么api把另一个动态库的资源加载过来
------解决思路----------------------
哎,你这个就是我上头说的问题啊,再给你个提示吧,查查
AFX_MANAGE_STATE(AfxGetStaticModuleState())
这条语句的意思,另外好好看看下头的文章
http://wenku.baidu.com/view/18f6a0777fd5360cba1adb58.html
RT
我需要用C++封装一个播放器(dll),在需要用的地方单独去调用。现在出现几个问题:
1、如果我把播放器作为应用程序来实现,这里没有问题;而且在这个工程里面新建窗口,再调用播放器窗口,也没有问题
2、如果将播放器封装为dll,新建一个项目,在这个项目中调用dll,我是通过接口来实现的
接口如下:
extern "C" __declspec(dllexport) void InitCTMPlayerDlg(HWND hwnd);//创建
extern "C" __declspec(dllexport) CDialogEx* GetDialog();//得到窗口
extern "C" __declspec(dllexport) BOOL ReleaseTMPlayerDlg();//释放窗口
这段代码,在当前项目中测试没有问题。(在别的地方调用就有问题)
3、在新项目中是这么调用的
typedef BOOL(*PFUN_WDWND_INIT)(CWnd *pParent);
typedef void(*PFUN_WDWND_RELEASE)();
typedef CDialogEx* (*PFUN_WDWND_GETWND)();
//下面是hLib装载正常
PFUN_WDWND_INIT pInitFunc = (PFUN_WDWND_INIT)GetProcAddress(hLib, "InitCTMPlayerDlg");
PFUN_WDWND_GETWND pGetWndFunc = (PFUN_WDWND_GETWND)GetProcAddress(hLib, "GetDialog");
PFUN_WDWND_RELEASE pReleaseFunc = (PFUN_WDWND_RELEASE)GetProcAddress(hLib, "ReleaseTMPlayerDlg");
if (!pInitFunc(this))//运行到这里的时候就出问题了
现在很郁闷,网上查了很多资料,都不知道怎么处理,发个帖子,望高手给予答复,多谢。
备注:如果不作为dll来使用的话,这个播放器所在项目运行均没有问题,我在想肯定是调用接口的时候哪里出现问题。
因为分不多,见谅了,本来就没有几分。
------解决思路----------------------
这应该是DLL的资源问题,看你这个调用好像是要初始化一个Dlg,应该是把对话框的资源文件打进动态库里了,你搜一下相关的资料吧,我很久以前碰到过,具体怎么弄倒是忘了,就是调用个什么api把另一个动态库的资源加载过来
------解决思路----------------------
哎,你这个就是我上头说的问题啊,再给你个提示吧,查查
AFX_MANAGE_STATE(AfxGetStaticModuleState())
这条语句的意思,另外好好看看下头的文章
http://wenku.baidu.com/view/18f6a0777fd5360cba1adb58.html