DLL如何调用对话框里的函数

nihs2008 2009-12-30 10:16:14
下面是用VC6.0做的.
我想做一个DLL,因为比较复杂,所以先在一个对话框里设计.好调一些.现在对话框里的诸功能均已做好了.
要在DLL里调用,我在DLL里面用Project->insert project into workspace把对话框工程加入了.
在DLL里也包含了对话框的头文件,如include "testdlg.h"
下面是我的三个问题
1>DLL里说Cannot open include file "testdlg.h"
2>是否要建立一个实例才能调用对话内的函数?如
CTestDlg testdlg;
testdlg.SomeFunctions();
这里SomeFuctions()是可以从testdlg后小数点出现的,但编辑时还是说找不到CTestDlg
3>DLL里采用的是char * DllString 的形式,而我想将这个字符串传给对话框里去,如testdlg.dlgString,我在对话框里采用的dlgString是CString类型的,传不进去. 在DLL里加了include "afx.h",并在设置(project settings)里改成了Use MFC in a shared DLL,但在DLL里还是不能认识CString类型.
万分焦急,切盼各位大师指点.谢谢

...全文
213 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nihongsheng 2010-01-11
  • 打赏
  • 举报
回复
应该是资源没有创建成功.实在没有办法的话,可以把对话框工程里你的函数一个一个拷到你的DLL里去,删除所有关于对话框的资源(这些资源想必是你为了验证显示你的函数运行是否正确而设的所以删除也没关系),包括这些资源的定义及引用.这应该没有问题.
你本来想把对话框直接弄进去省点力,反而......,只好提供一个笨办法.
nihs2008 2010-01-04
  • 打赏
  • 举报
回复
万般无奈,用MFC重建了一个DLL,再把C语言的DLL搬进去.再将对话框的各个类和资源都弄进去了,编译正常通过.调用时出现错误:
afxwin1.inl line 22
查了一下说是创建资源时找不到.(应是对话框资源找不到吧)
我的代码是这样的:
__declspec(dllexport) int WINAPI MAC(CA* pData)
{
if ( pData->m_p1>0)
{
float fParam = *pData->m_p1;

//AFX_MANAGE_STATE(AfxGetStaticModuleState());

CDlgProjDlg testdlg; //在这里出错
CString strFortest;
strFortest="OK!OK!OK!";
//testdlg.ShowMessageFunc(strFortest);......
}
去掉CDlgProjDlg testdlg; 就没有上述Assert错误.
如果加上如上屏蔽的AFX_MANAGE_STATE(AfxGetStaticModuleState()); 则编译不能通过,说是什么已定义,如下:
mfcs42d.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in delme.obj
mfcs42d.lib(dllmodul.obj) : error LNK2005: __pRawDllMain already defined in delme.obj
mfcs42d.lib(dllmodul.obj) : warning LNK4006: _DllMain@12 already defined in delme.obj; second definition ignored
mfcs42d.lib(dllmodul.obj) : warning LNK4006: __pRawDllMain already defined in delme.obj; second definition ignored
怎么都弄不好,人都要疯了,请各位大侠救苦救难,顿足拜谢
mazm_yanzhu 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 nihs2008 的回复:]
引用 6 楼 vclongking 的回复:
主要问题就是没建立MFC DLL工程

我的问题实质是一个C语言写的DLL调用一个用MFC写的对话框出现的问题,所以MFC中的很多东西在DLL中无法用。否则不会这么为难啦。还望各位多多指教。
为什么这个DLL用C写呢,呵呵,是因为它是别人已写好的,我已运行验证过了没问题,所以我不想改它。对话框为什么是MFC的呢,因为它是我自已写的,较复杂,为便于调试所以写成了对话框形式,用MFC则是因为更方便。
现在我只是想在DLL里调用对话框里的功能函数,来扩展DLL功能。
(当然想办法用MFC来重构一个原来的DLL源码也是一种思路)
[/Quote]

那你只能是不在对话框中用CString,或者你再写个能用MFC的DLL,见对话框代码放进去,然后在C的dll中调用这个MFC的dll
nihs2008 2010-01-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vclongking 的回复:]
主要问题就是没建立MFC DLL工程
[/Quote]
我的问题实质是一个C语言写的DLL调用一个用MFC写的对话框出现的问题,所以MFC中的很多东西在DLL中无法用。否则不会这么为难啦。还望各位多多指教。
为什么这个DLL用C写呢,呵呵,是因为它是别人已写好的,我已运行验证过了没问题,所以我不想改它。对话框为什么是MFC的呢,因为它是我自已写的,较复杂,为便于调试所以写成了对话框形式,用MFC则是因为更方便。
现在我只是想在DLL里调用对话框里的功能函数,来扩展DLL功能。
(当然想办法用MFC来重构一个原来的DLL源码也是一种思路)
vclongking 2010-01-01
  • 打赏
  • 举报
回复
主要问题就是没建立MFC DLL工程
nihs2008 2010-01-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zxdlms 的回复:]
使用了一楼的方法就没有后面两个问题了。

另外你的设计也没说清楚。
我想做一个DLL,因为比较复杂,所以先在一个对话框里设计.好调一些.现在对话框里的诸功能均已做好了。到底你是仅仅想从dll中导出一些函数还是导出整个对话框呢??

如果是导出函数的话没必要和对话框扯上关系啊,如果要导出对话框,只需要DoModal即可,剩下的应该又对话框类完成啊 。
[/Quote]
想做的是一个DLL,因为函数已在一个对话框里设计好了,所以是想DLL调用对话框类的函数. 所以是想将字符串传到对话框函数里去. DLL不认识CString类(虽然对话框里可用CString类),所以发生问题了.还请不吝赐教.谢谢
nihs2008 2009-12-31
  • 打赏
  • 举报
回复
后面二个问题呢?
zxdlms 2009-12-31
  • 打赏
  • 举报
回复
使用了一楼的方法就没有后面两个问题了。

另外你的设计也没说清楚。
我想做一个DLL,因为比较复杂,所以先在一个对话框里设计.好调一些.现在对话框里的诸功能均已做好了。 到底你是仅仅想从dll中导出一些函数还是导出整个对话框呢??

如果是导出函数的话没必要和对话框扯上关系啊,如果要导出对话框,只需要DoModal即可,剩下的应该又对话框类完成啊 。
ImJaden 2009-12-30
  • 打赏
  • 举报
回复
同意一楼;
oyljerry 2009-12-30
  • 打赏
  • 举报
回复
建立MFC DLL工程,然后插入对话框资源,..

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧