MFC加载IM的dll完成!(算完成了吧?)

作者成功将基于RT_ORB的即时信息控制台程序封装为DLL,并集成到MFC应用程序中。过程中涉及路径设置、链接配置及宏定义等步骤。通过使用ACE/TAO实现了设计模式,利用虚函数解决了DLL与MFC交互的问题。

忙了这两天,终于把前几天写的基于rt_orb的那个即时信息的控制台程序给包装到了dll里,然后再加载入MFC中。完成这个过程,感受还是蛮多的,设置路径,链接,定义头文件的宏,都很重要,最重要的是,ACE/TAO作为设计模式实现是再经典不过了。而要想使用它也不的不遵循设计模式。使用模板类很大程度上节约了编码以及使代码明晰,如要使用原子类型,自己定义就可以了

typedef ACE_Atomic_Op<ACE_Thread_Mutex, bool> SafeBool;

嗯,我现在终于用上虚函数了-_-! 接受信息的线程以前是输出到标准输出的,现在要到文本框里,而dll里又不能包含MFC的类库。。。哈哈虚函数解决问题。在dll里事件到来之后就向Test_Work指针指向的WriteToMe(char* v);写信息,而在MFC里则继承新的 CEditTest_Work 类,重载WriteToMe(char* v);方法写到CEdit里。运行之前向dll注册继承类的指针就可以了,当然,还要向上类型转换。。。

 

class  QUOTER_COMMON_Export Test_Work{
public:

Test_Work()
 {}

virtual void WriteToMe(char* v);
};

class  CEditTest_Work : public Test_Work
{
public:

 CEditTest_Work()
 { }

 void registerCEdit(CEdit* o);

 virtual void WriteToMe(char* v);

private:

 CEdit* m_out;
};

现在在非调试状态,程序能运行了,但是在调试状态C++标准库的函数不正常工作。。ifstream的getline一直返回空!按理说应该是把TAO在ACE_HAS_MFC下再编译成新的ace_mfcd.dll来用的,我也没,直接就拿来用了,而且就算什么都不干,ACE::init().... ACE::fini();也有内存泄露!总之,问题多多,不过,还是能跑了

:)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值