“Fork

CAXA二次开发

开发实例

用向导创建Hello World程序

1.3.1 说明

本节使用 ObjectCRX向导创建一个Hello World 程序,了解向导创建的工程的基本结构,并且学习使用ObjectCRX内嵌工具栏注册命令的方法。程序执行的结果是在 电子图板命令行显示“Hello World!”字符串。

1.3.2 思路

使用向导创建 ObjectCRX应用程序,能够大大简化操作的步骤,向导自动生成了大量的代码。同学习MFC 一样,如果了解了向导工作的内容,那么使用向导能够大大节省工作量;如果不了解,则可能越用越糊涂。

1.3.3 步骤

(1)在Visual Studio 2019 集成开发环境中,选择[文件/新建/项目]菜单项,系统会弹出[项目]对话框。在[项目]选项卡的工程类型列表中选择[Visual C++/CAXA],然后在其工程列表中选择[ObjectCRX Projects],在下面[名称]文本框中输入工程名称Hello2,在[位置]文本框中输入适当的工程位置,如图1.1所示。完成设置后,单击[确定]按钮。

image

 

(2)在弹出的对话框中,选择Create a extension DLL(MFC shared)(O) 选项,如图1.2所示。设置完毕之后,单击[Finish]按钮。

image

(3) 向导所创建的动态链接库的基本信息,如下图1.3所示

image

创建的各个文件及其作用:

□StdAfx.h:预编译头文件的创建。

□Resource.h:资源标记的声明。

□StdAfx.cpp: 预编译文件

□CrxEntryPoint.cpp 程序入口类所在的文件。其中包含两个函 数On_kInitAppMsg和On_kUnloadAppMsg。On_kInitAppMsg实 际上这里它只做一件事情,就是使用电子图板的命令机制注册一 个新命令。这个命令同电子图板的内部命令一样,可以直接在命 令行中执行。实际上,这就是运行CRX 程序的方法。 On_kUnloadAppMsg函数则在程序被卸载时所调用。

此文件中包含addCommand 函数,其封装在AddCommand 函数,用于向电子图板注册命令。

□CrxToolAddin.cpp:应用程序入口点。其中包含_hdllInstance变量和DllMain函数。hdllInstance 变量是在DllMain函数中使用,一般不用注意。DllMain 函数是动态链接库(DLL)的入口点函数,一般来说不用注意。

(4)编译环境设置

项目要准确编译需要附加项目所需要的头文件和库文件。

在vs2010的解决方案资源管理器窗口选择CrxToolAddin项目,右键选择“属性”,弹出属性窗口,在属性窗口中选择[C/C++ / 常规],然后在附加包含目录项中,附加ObjectCRX开发包下头文件所在的目录D:\Program Files\CAXA2024\CRX\Inc,如下图1.4

image

然后再属性窗口上选择[链接器\常规],然后在附加库目录项中,附件库文件所在目录

D:\Program Files\CAXA2024\bin\CAXADraft\CRX\Lib,如下图1.5

image

注意:将配置属性/常规/目标文件扩展名参数设置为.crx能够避免默认工程编译出现警告,如图1.6所示。

image

(5)helloworld函数如下:

void cmdHello()

{

acutPrintf(_T("\nHello World!"));

}

需要附件头文件如下:#include "crxutcds.h"

注意:acutPrintf一定要加上,如果按照帮助文档的写法,输入命令之后没反应,加上这个之后就可以实现命令行输出“Hello World!”

(6)注册hello命令完整代码。

需要在项目的CrxEntryPoint.cpp文件中,添加在电子图板中注册命令和卸载命令的代码,详细代码如下:

#include "stdafx.h"
#include "resource.h"
#include "crxutcds.h"//需要附件的头文件


#define szRDS _RXST("")

//-----------------------------------------------------------------------------

//注册的helloworld函数代码写在这里

void cmdHello()
{
acutPrintf(_T("\n 20260205 Hello World!"));
}

//-----------------------------------------------------------------------------
//----- CCrxProjectTestEntryPoint
class CCrxProjectTestApp:public AcRxArxApp
{
public:
CCrxProjectTestApp():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);
crxedRegCmds->addCommand(_T("HelloApp"), _T("GHello"), _T("Hello"), ACRX_CMD_MODAL, &cmdHello);
// 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
crxedRegCmds->removeGroup(_T("HelloApp"));
return (retCode);
}

virtual void RegisterServerComponents()
{

}



};

IMPLEMENT_ARX_ENTRYPOINT(CCrxProjectTestApp)

 

1.3.4 效果

在Visual Studio 2019中,按下快捷键F5对程序进行调试,系统会自动启动电子图板2024。使用MANAGE命令加载生成的CRX文件,如图1.7所示。

image

 在CAXA CAD的命令行输入“Hello”,启动执行命令之后,会出现“Hello Word!”,如图1.8所示的结果。

至此,CAXA CAD的入门开发程序“Hello Word!”已实现。

posted @ 2026-02-05 15:04  颜廷国  阅读(123)  评论(3)    收藏  举报