我做了一个ATL项目,并在里面添加了一个ATL控件,在编写这个控件的时候,我想用theApp对象的m_hInstance,但VC6老是报出错,说theApp未定义。
我在控件的CPP文件前面添加
extern CPrjChameleonApp theApp;
则报这句代码出错。
请问各位是如何在使用VC6制作支持MFC的ATL控件时,引用theApp的?
VS2003中的支持MFC的ATL控件中,在声明了extern CPrjChameleonApp theApp;
之后,就可以引用theApp的说,而且theApp的类型也与VC6不同,
extern CPrjChameleonApp NEAR theApp;
多了一个NEAR

解决方案 »

  1.   

    extern CPrjChameleonApp theApp;
    这句话加在CPrjChameleonApp类头文件的最后,即这个类定义结束后进行申明。其它要用theApp的类只需要包含这个app头文件即可。
    app类创建时就会在cpp中申明一个CPrjChameleonApp theApp;
      

  2.   

    不行。ATL项目和MFC EXE项目有点不一样,它的线程类的头文件PrjChameleonApp.h是在编译的时候自动生成的,里面还包含IDL文件中的接口定义。
    VC生成的工程框架中线程类的声明是放在PrjChameleonApp.cpp文件中的。
    我没办法改PrjChameleonApp.h。
      

  3.   

    2003没有使用过。呵呵,就VC6的ATL来说它一般只有一个类似MFC的theApp的定义:
    CComModule _Module;
    它是一个全局的变量,起到类似theApp的作用。如果你是想使用MFC中的类,直接包含相关的头文件即可。如果是其他的可以直接使用这个全局变量获得相关的全局信息。
      

  4.   

    CComModule::m_hInst
    这个对象就是模块(控件)的实例句柄。