一、 创建objectarx的dll程序 1、首先在项目选项中选“mfc appwizard(dll)",然后选mfc extension dll,然后输入项目名 2、在“Project settings"对话框中“general"标签项中“Microsoft foundation classes "域 选“use mfc in a shared dll ." 3、打开由appwizard所建立的.cpp项目文件,删除afx_extension_module宏,并且增加ac_implement_extension_module(emx)宏。emx用于提供缺省资源和模块资源,切换资源状态。并且删除不需要代码、添加必要的代码(后文讲述) 4、在link标签项中,“general"栏“output file name"项输入编译后的应用程序名,后缀为.arx 5、在link标签项中,“output"栏,“base address"项输入“0x1c000000","entry-point symbol"项输入“dllentrypoint@12" 6、在c/c++标签项中,"code generation"栏“use run-time library"项选“multithread dll" 7、在c/c++标签项中,“PReProcessor"栏中定义_Windll,_afxdll 二、 mfc 模块状态执行和资源处理 在每个使用了Microsoft foundation classes (mfc)的模块(exe,dll)中,都存在一种“全局”数据,mfc正是依*这种全局数据才能执行正确的操作。这种全局数据就叫做mfc 模块状态。设计为扩展dll的arx应用程序通常假设当前的模块状态是AutoCAD的。应该确认AutoCAD的模块状态已置为当前,arx应用程序可以通过调用afx_manage_state(afxgetappmodulestate())来实现这一功能。cacmoduleresourceoverrIDe创建一个变量,一个新资源提供者由构造函数交换,缺省资源由析构函数交换。在AutoCAD中,cacextensionmodule提供afx_extension_module结构的位置标识符和追踪模块资源和缺省资源。只有正确处理资源转台才能使arx程序不出问题。在arx中加入ac_implement_extension_module(emx)宏,可以由emx.attachinstance切换模块资源,由emx..detachinstance()恢复缺省资源。 三、 arx的框架代码 如下: #include "stdafx.h" #include "asdkacUIsample.h" #include "asdkacUIdialogsample.h" #include "acextensionmodule.h" #ifdef _debUG #define new debUG_new #undef this_file static char this_file[] = __file__; #endif extern "c" hwnd adSW_aCADmAInwnd(); // define the sole extension module object. ac_implement_extension_module(thearxdll); static voID initapp() { cacmoduleresourceoverrIDe resoverrIDe; } static voID unloadapp() { } extern "c" int apientry dllmAIn(hinstance hinstance, dWord dwreason, lpvoID lPReserved) { unreferenced_parameter(lPReserved); if (dwreason == dll_Process_attach) { thearxdll.attachinstance(hinstance); } else if (dwreason == dll_Process_detach) { thearxdll.detachinstance(); } return 1; // ok } extern "c" acrx::apPRetcode acrxentrypoint( acrx::appmsgcode msg, voID* appID) { SWitch( msg ) { case acrx::kinitappmsg: acrxdynamiclinker->unlockapplication(appID); acrxdynamiclinker->registerappmdiaware(appID); initapp(); break; case acrx::kunloadappmsg: unloadapp(); break; case acrx::kinitdialogmsg: break; defAult: break; } return acrx::kretok; } 应用以上框架代码就可以添加自己的程序功能 四、 应用向导 在objectarx 2000 sdk中有一个应用向导可以生成arx程序框架代码
采纳哦