Уважаемый VVV!
Давайте попробуем разобраться по другому.
Вот кусок кода который глючит.
static void initApp()
{
//theArxDLL.AttachInstance(); этой функции параметра какого-то не хватает я его сразу заремил
CAcModuleResourceOverride resOverride; // это вроде как то что надо и по теме только заремливание его в примере из ObjArx не приводит к появлению ошибки
//а вот addcommand конфликтует:((
acedRegCmds->addCommand(
"ASDK_ACUI_SAMPLE",
"ASDKACUISAMPLE",
"ACUISAMPLE",
ACRX_CMD_MODAL,
dialogCreate,
NULL,
-1,
theArxDLL.ModuleResourceInstance());
}
Перевод "девелопер гуида" полный для этого примера.
(он малюсенький:)
Создать приложение ObjectARX MFC
Скелет программы
1 Создать новый проект в Microsoft Visual C++ , используя приложение Wizard.
Выбрать тип проекта MFC AppWizard (dll) . Задать имя проекта (для
данного примера мы выбрали имя AsdkAcUiSample) и директорию и кликните
OK. В следующем поле выберите MFC Extension(расширение) DLL, затем кликните Finish. Мы
получили основной проект MFC Extension( расширение) DLL.
2 Теперь нам надо добавить нужный код для поддержки ObjectARX. Откройте файл
AsdkAcUiSample.cpp . Удалите запрос AFX_EXTENSION_MODULE , а также
функцию DllMain.
3 Добавьте следующее объявление:
AC_IMPLEMENT_EXTENSION_MODULE(theArxDLL);
4 Для настройки комнд AutoCAD и
acrxEntryPoint добавьте код :
void dialogCreate()
{
acutPrintf("\nAcUi Dialog Sample");
}
Обращение addCommand использует экземпляр модульного ресурса
из макроса AC_IMPLEMENT_EXTENSION_MODULE :
static void initApp()
{
theArxDLL.AttachInstance();
CAcModuleResourceOverride resOverride;
acedRegCmds->addCommand(
"ASDK_ACUI_SAMPLE",
"ASDKACUISAMPLE",
"ACUISAMPLE",
ACRX_CMD_MODAL,
dialogCreate,
NULL,
-1,
theArxDLL.ModuleResourceInstance());
}
Следующая функция unloadApp() запрашивается при разгрузке приложения.
В это время очень важно отсоединить экземпляр(копию) ресурса:
static void unloadApp()
{
// Сделать здесь другие задачи очистки
acedRegCmds->removeGroup("ASDK_ACUI_SAMPLE");
theArxDLL.DetachInstance();
}
// Точка входа
//
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;
}
Создайте исходный файл AsdkAcUiSample.h и добавьте следующую строку в
файл:
#include "resource.h" // main symbols
#define PI 3.14159265359
// Предварительное описание функции точки входа нашего
// приложения
void testCreate();
Затем добавьте следующие включаемые файлы AsdkAcUiSample.cpp:
#include "AsdkAcUiSample.h"
#include "AcExtensionModule.h"
Вам также необходимо будет добавить библиотеки ObjectARX к проектным файлам, поменяйте
расширение .dll на .arx, и модифицируйте файл .def собственным экспортом.
Теперь Вы должны быть в состоянии скомпилировать и загрузить приложение.