我在EXE里隐式加载一个DLL,DLL导出了类和函数,主EXE可以调用,可是我想同时反过来DLL调用EXE的类和函数,我该怎么做呢???
这个EXE和DLL在一个进程,也在一个线程里面。
现在只能单向操作,EXE调DLL的类和函数。大多数情况也是这么用的。
我反过来调用。大家有没有好的方法。
一、不用EXE向DLL传主APP指针,再从DLL向EXE发消息的方法。
二、也不用将EXE注册成COM或automation的方式。
大家有没有其它更好的方法啊?我可不可以直接在DLL里面连接EXE的LIB文件。这样相互引用好象是有问题的。就象先有鸡还是先有蛋的问题。
问题点数:20、回复次数:31Top
1 楼gwinner(动力引擎)回复于 2004-12-02 17:57:48 得分 0
用回调函数。
用CallBack在MSDN里查一下,会有启发的Top
2 楼zhangyiabc(zhangyiabc)回复于 2004-12-02 18:02:00 得分 0
用回调也不是在DLL里进行主动调用啊?我的理解是这样的
能不能主动调EXE的函数或类实例?
Top
3 楼zhangyiabc(zhangyiabc)回复于 2004-12-02 18:14:45 得分 0
我还想调主EXE的类实例的成员函数。有没有更好的方法呢?谢谢上面那位朋友的回答Top
4 楼zhangyiabc(zhangyiabc)回复于 2004-12-02 19:38:48 得分 0
有没有朋友有好的办法啊:)?Top
5 楼sdsuper(泊舟)回复于 2004-12-02 21:12:37 得分 0
有这样的想法就是不对的。Top
6 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2004-12-02 21:27:03 得分 0
一般就是回调了,楼主的要求...Top
7 楼wangjia184(我就是传说中的。。。。。。SB)回复于 2004-12-02 21:33:12 得分 0
/......Top
8 楼hifan(Kee)回复于 2004-12-02 22:04:17 得分 0
好像不行的吧~!
/?Top
9 楼zhangyiabc(zhangyiabc)回复于 2004-12-02 23:40:30 得分 0
回调就是把函数指针传给DLL了嘛。而且如果是类还必须是静态的函数才能传。太死板了Top
10 楼gwinner(动力引擎)回复于 2004-12-03 11:15:28 得分 0
又不让用COM的连接点!偶没辙了Top
11 楼aoosang(智慧的鱼)回复于 2004-12-03 16:03:36 得分 0
好像没有合适的方法,楼主的想法很好,只有敢于怀疑才能进步Top
12 楼Quinn(稻草人)回复于 2004-12-06 19:38:46 得分 0
用DLL调用EXE的类和函数的做法比较不好,我建议你改变思路,重新设计算法结构.Top
13 楼zhangyiabc(zhangyiabc)回复于 2004-12-07 13:23:29 得分 0
请教大家,如果这样思路不好,那我要从EXE导出类或函数应该怎么办啊?Top
14 楼moloto2004()回复于 2004-12-07 16:06:10 得分 0
做成DLL导出吧Top
15 楼zhangyiabc(zhangyiabc)回复于 2004-12-08 11:06:00 得分 0
呵呵,我已经把这个框架拆了七个DLL了,如果做成DLL导出了,那主EXE都没有了。我想的就是把主EXE的一些视图控制的方法公开出来。因为结合很紧密,我不想用COM的方法, 事实上COM的automation方法我也实现了。我只是想用VC的导出方法,这样和我的工程结合会更紧些。
非常感谢大家的热心,欢迎继续讨论:)Top
16 楼elabs(洋洋)回复于 2004-12-08 22:42:11 得分 0
其实我也有这样的疑问,想做一个EXE,它能输出对外调用的方法,但是EXE不被执行起来输出方法无法使用,不知道有没有这样的方法。Top
17 楼yuanarea(Sail before)回复于 2004-12-15 04:26:49 得分 0
关注,学习!!顶!!!这次不要分了。。。。。Top
18 楼msm(msm)回复于 2004-12-15 09:24:13 得分 0
高手Top
19 楼jackieji(一个人走...)回复于 2004-12-15 09:48:18 得分 0
关注Top
20 楼vctool(乔峰)回复于 2004-12-15 13:51:44 得分 0
可以的,EXE也可以导出函数的,在DLL中得到主程序的HANDLE,然后用GETPROCADDRESS就可以了.Top
21 楼xrenwu(卖火柴的大男孩)回复于 2004-12-15 15:05:50 得分 0
高手,顶
Top
22 楼pi31415926(免战牌)回复于 2004-12-16 15:08:03 得分 0
把所需要的视图类用DLL导出来,EXE或别的DLL都可以用啊!不是什么高明办法,不过这么做最省事!Top
23 楼longfeisky(龙飞)回复于 2004-12-16 16:49:38 得分 0
学习,要是注入了其他进程,也可以用GETPROCADDRESS吗?字符串会不会存在就不知道了Top
24 楼zhangyiabc(zhangyiabc)回复于 2004-12-17 10:56:11 得分 0
好已经导出很多了不过EXE真的可以导出么?怎么定义?还是用DEF或者是API_EXT_EXPORT?Top
25 楼Juchiyufei(三更半夜我送你回家.总统也许我做不到.今生难得的遇见你,我们就应该在一起.....)回复于 2004-12-17 11:41:15 得分 0
你可以向主线程发送消息,
或
声明一个全局变量使两个工程都可以访问它Top
26 楼zheng_rui(我也是猪)回复于 2004-12-17 14:41:19 得分 5
用纯虚类Top
27 楼sjhunter()回复于 2004-12-17 15:00:46 得分 15
呵呵,被抢先了,用纯虚类,在EXE和DLL里都定义,然后在EXE里继承这个类,将需要的纯虚函数都实现了,DLL暴露一个函数,EXE用这个函数将自己的一个类实例的指针传给DLL,就可以了,我以前项目里用过Top
28 楼pi31415926(免战牌)回复于 2004-12-20 07:53:07 得分 0
高,楼上实在是高,这样是不是可以在不同语言中调用导出的类啊?比如在Delphi里调用VC编译的DLL或EXE里导出的MFC扩展类?Top
29 楼sjhunter()回复于 2004-12-20 09:09:46 得分 0
没试过,我难得不用C++Top
30 楼sinall()回复于 2004-12-20 11:30:58 得分 0
所谓“虚基类”指的还是需要exe把类实例的指针传给dll
其实,这个方法就是COM!!!
那么,我有个更好的方法:
楼主把COM不叫COM,然后用COM的那一套就可以实现了。
你所说的dll主动调用exe的方法,其实就是这样的了。Top
31 楼zhangyiabc(zhangyiabc)回复于 2004-12-20 12:48:37 得分 0
好办法!Good idea!Top




