xiaomm250 发表于 2013-7-29 11:01:08

向导的arx自动生成的代码virtual中的不明白

//-----------------------------------------------------------------------------
//----- acrxEntryPoint.cpp
//-----------------------------------------------------------------------------
#include "StdAfx.h"
#include "resource.h"
#include <tchar.h>

//-----------------------------------------------------------------------------
#define szRDS _RXST("hjkl_")

//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class Carx1App : public AcRxArxApp {

public:
Carx1App () : AcRxArxApp () {}
//////////////////////////////////////下面的这行我不明白!
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {
    // TODO: Load dependencies here

    // You *must* call On_kInitAppMsg here
    AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;
   
    // TODO: Add your initialization code here

    return (retCode) ;
}

virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {
    // TODO: Add your code here

    // You *must* call On_kUnloadAppMsg here
    AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;

    // TODO: Unload dependencies here

    return (retCode) ;
}

virtual void RegisterServerComponents () {
}


// - hjkl_arx1.arx1 command (do not rename)
static void hjkl_arx1arx1(void)
{
    // Add your code for command hjkl_arx1.arx1 here
    acutPrintf(_T("你大爷的,你在搞什么呢?????????"));
}

// - hjkl_arx1.q9527 command (do not rename)
static void hjkl_arx1q9527(void)
{
    // Add your code for command hjkl_arx1.q9527 here
}
} ;

//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(Carx1App)

ACED_ARXCOMMAND_ENTRY_AUTO(Carx1App, hjkl_arx1, arx1, 你大爷, ACRX_CMD_TRANSPARENT, NULL)
ACED_ARXCOMMAND_ENTRY_AUTO(Carx1App, hjkl_arx1, q9527, g2, ACRX_CMD_TRANSPARENT, NULL)


问题来了:
//////////////////////////////////////下面的这行我不明白!
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt)
我看过的c++书籍,
都是virtual 后面跟一个函数,
而此处AcRx::AppRetCode 是一个函数,而On_kInitAppMsg 又是另外一个函数,让我不明白是什么意思!
求高手解答

286168051 发表于 2013-7-29 11:18:55

定义C++中虚函数的关键字
在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数时是通过指针或引用调用,
C++则对成员函数进行动态编联。

xiaomm250 发表于 2013-7-29 11:23:01

286168051 发表于 2013-7-29 11:18 static/image/common/back.gif
定义C++中虚函数的关键字
在使用virtual之前,C++对成员函数使用静态联编,而使用virtual,并且在调用函数 ...

我知道virtual的意思

xiaomm250 发表于 2013-7-29 11:24:27

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt)
这句能和virtual    int   On_kInitAppMsg (void *pkt)
类比吗?
可是AcRx::AppRetCode 明显是类AcRx的构造函数AppRetCode呀

luowy 发表于 2013-7-30 13:56:44

本帖最后由 luowy 于 2013-7-30 14:02 编辑

xiaomm250 发表于 2013-7-29 11:24 http://bbs.mjtd.com/static/image/common/back.gif
virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt)
这句能和virtual    int   On_kInitAppMsg (void ...

AcRx是个struct,AppRetCode是个枚举变量(enum,是enumeration 的缩写),在C++中,有些时候为了代码更加具有可读性,引入这么个枚举变量,如 MyInt{First , Second, Third},这个First是MyInt::First,默认的值就是个int类型,值为0。 MyInt{First=1 , Second, Third},按上面的来讲,First就是1,而不是为0了。这是C++的内容。

virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt),这个函数就不难看懂了吧?
virtual关键字,表明是个虚函数。
AcRx::AppRetCode这个是枚举变量的内容,跟上面示例的MyInt是一个东西,也是下面函数的返回值内容,
On_***是函数名称。

如果还不明白,我就再说多点,On_***这个函数返回的,一定是AcRx::AppRetCode的东西,就是kRetOk或者kRetError。

ObjectARX中,还有很多类似的东西,用得最多的就是:Acad::ErrorStatus。

最后,附上完整的AcRx定义:struct AcRx {

    typedef void (*FcnPtr) ();

    enum         DictIterType { kDictSorted   = 0,
                              kDictCollated = 1 };

    enum         Ordering   { kLessThan   = -1,
                              kEqual      = 0,
                              kGreaterThan= 1,
                              kNotOrderable = 2 };

    enum         AppMsgCode   { kNullMsg         = 0,
                              kInitAppMsg      = 1,
                              kUnloadAppMsg    = 2,
                              kLoadDwgMsg      = 3,
                              kUnloadDwgMsg    = 4,
                              kInvkSubrMsg   = 5,
                              kCfgMsg          = 6,
                              kEndMsg          = 7,
                              kQuitMsg         = 8,
                              kSaveMsg         = 9,
                              kDependencyMsg   = 10,
                              kNoDependencyMsg = 11,
                              kOleUnloadAppMsg = 12,
                              kPreQuitMsg      = 13,
                              kInitDialogMsg   = 14,
                              kEndDialogMsg    = 15,                              
                              kSuspendMsg      = 16 };                              
      

    enum      AppRetCode   { kRetOK          = 0,
                              kRetError       = 3 };
};

xiaomm250 发表于 2013-10-16 19:36:37

是rxdefx.h这个头文件里面,我自己找到了

xiaomm250 发表于 2013-10-16 19:42:52

acadstrc.h这个里面包含了Acad::ErrorStatus这个说明
页: [1]
查看完整版本: 向导的arx自动生成的代码virtual中的不明白