㈠ 如何设置ug编程中的后处理
在设置UG编程中的后处理时,首先需创建ObjectARX的DLL程序。打开项目选项,选择“MFC AppWizard(DLL)",选择MFC Extension DLL,输入项目名。在“Project Settings"对话框中,于“General"标签项的“Microsoft Foundation Classes "域选择“Use MFC in a Shared DLL ."。打开由AppWizard生成的.cpp项目文件,移除AFX_EXTENSION_MODULE宏,并添加AC_IMPLEMENT_EXTENSION_MODULE(emx)宏。Emx提供缺省资源和模块资源,切换资源状态。删除不必要的代码,添加所需代码。
在Link标签项中,“General"栏“Output file name"项输入编译后的应用程序名,后缀为.arx。“Output"栏,“Base address"项输入“0x1c000000","Entry-point symbol"项输入“DllEntryPoint@12"。在C/C++标签项中,“Code Generation"栏“Use Run-time library"项选“Multithread DLL"。在“Preprocessor"栏中定义_WINDLL,_AFXDLL。
MFC模块状态执行和资源处理对于ARX程序至关重要。每个使用了MFC的模块(EXE,DLL)都存在一种“全局”数据,MFC正是通过这种全局数据才能执行正确的操作。在ARX程序中加入AC_IMPLEMENT_EXTENSION_MODULE(emx)宏,可以由emx.AttachInstance切换模块资源,由emx.DetachInstance()恢复缺省资源。
ARX的框架代码示例如下:
#include "stdafx.h"
#include "AsdkAcUiSample.h"
#include "AsdkAcUiDialogSample.h"
#include "AcExtensionMole.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern "C" HWND adsw_acadMainWnd();
AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL);
static void initApp()
{
CAcMoleResourceOverride 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;
}
遵循以上步骤,就可以在UG编程中成功设置后处理。应用向导在ObjectARX 2000 SDK中可用于生成ARX程序框架代码,为编程提供便利。