天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 43|回复: 0

ObjectARX编程在VC++中的处理

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
一、 创建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程序框架代码

 

 

 

 

ObjectARX编程在VC++中的处理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:39 , Processed in 0.139168 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表