Тема: 1 приложение ObjectARX

Подскажите пожалуйста, где недоработки? Извечный русский вопрос, что делать?

Проект вроде бы простой, создать окно типа About. Дальше код.

//-----------------------------------------------------------------------------
//----- acrxEntryPoint.cpp
//-----------------------------------------------------------------------------
#include "StdAfx.h"
#include "resource.h"
#include "DialogSetka.h"
//-----------------------------------------------------------------------------
#define szRDS _RXST("Asdk")

//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class CArxProbaApp : public AcRxArxApp {

public:
    CArxProbaApp () : 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) ;
        
        // 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

        return (retCode) ;
    }

    virtual void RegisterServerComponents () {
    }


    // - AsdkArxProba._CreateDialogSetka command (do not rename)
    static void AsdkArxProba_CDSetka(void)
    {
        
        CAcModuleResourceOverride res;
        CDialogSetka dlg;
        dlg.DoModal(); 
        

    }
} ;

//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CArxProbaApp)

ACED_ARXCOMMAND_ENTRY_AUTO(CArxProbaApp, AsdkArxProba, _CDSetka, CDSetka, ACRX_CMD_SESSION | ACRX_CMD_MODAL, NULL)

//-----------------------------------------------------------------------------
//- ArxProba.cpp : Initialization functions
//-----------------------------------------------------------------------------
#include "StdAfx.h"
#include "resource.h"
#include <afxdllx.h>

//-----------------------------------------------------------------------------
//- Define the sole extension module object.
AC_IMPLEMENT_EXTENSION_MODULE(ArxProbaDLL)
//- Please do not remove the 3 following lines. These are here to make .NET MFC Wizards
//- running properly. The object will not compile but is require by .NET to recognize
//- this project as being an MFC project
#ifdef NEVER
AFX_EXTENSION_MODULE ArxProbaExtDLL ={ NULL, NULL } ;
#endif

//- Now you can use the CAcModuleResourceOverride class in
//- your application to switch to the correct resource instance.
//- Please see the ObjectARX Documentation for more details

//-----------------------------------------------------------------------------
//- DLL Entry Point
extern "C"
BOOL WINAPI DllMain (HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
    //- Remove this if you use lpReserved
    UNREFERENCED_PARAMETER(lpReserved) ;

    if ( dwReason == DLL_PROCESS_ATTACH ) {
        _hdllInstance =hInstance ;
        ArxProbaDLL.AttachInstance (hInstance) ;
        InitAcUiDLL () ;
    } else if ( dwReason == DLL_PROCESS_DETACH ) {
        ArxProbaDLL.DetachInstance () ;
    }
    return (TRUE) ;
}

//-----------------------------------------------------------------------------
//----- DialogSetka.h : Declaration of the CDialogSetka
//-----------------------------------------------------------------------------
#pragma once

//-----------------------------------------------------------------------------
#include "adui.h"

//-----------------------------------------------------------------------------
class CDialogSetka : public CAcUiDialog {
    DECLARE_DYNAMIC (CDialogSetka)

public:
    CDialogSetka (CWnd *pParent =NULL, HINSTANCE hInstance =NULL) ;

    enum { IDD = IDD_DIALOGSETKA} ;

protected:
    virtual void DoDataExchange (CDataExchange *pDX) ;
    afx_msg LRESULT OnAcadKeepFocus (WPARAM, LPARAM) ;
    virtual BOOL OnInitDialog();

    DECLARE_MESSAGE_MAP()

public:
       afx_msg void OnBnClickedOk();
       afx_msg void OnBnClickedCansel();
} ;

//-----------------------------------------------------------------------------
//----- DialogSetka.cpp : Implementation of CDialogSetka
//-----------------------------------------------------------------------------
#include "StdAfx.h"
#include "resource.h"
#include "DialogSetka.h"

//-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC (CDialogSetka, CAcUiDialog)

BEGIN_MESSAGE_MAP(CDialogSetka, CAcUiDialog)
    ON_MESSAGE(WM_ACAD_KEEPFOCUS, OnAcadKeepFocus)
    ON_BN_CLICKED(IDOK, OnBnClickedOk)
    ON_BN_CLICKED(IDCANCEL, OnBnClickedCansel)
END_MESSAGE_MAP()


//IDCANCEL

//-----------------------------------------------------------------------------
CDialogSetka::CDialogSetka (CWnd *pParent /*=NULL*/, HINSTANCE hInstance /*=NULL*/) : CAcUiDialog (CDialogSetka::IDD, pParent, hInstance) {
}

//-----------------------------------------------------------------------------
void CDialogSetka::DoDataExchange (CDataExchange *pDX) {
    CAcUiDialog::DoDataExchange (pDX) ;
}

//-----------------------------------------------------------------------------
//----- Needed for modeless dialogs to keep focus.
//----- Return FALSE to not keep the focus, return TRUE to keep the focus
LRESULT CDialogSetka::OnAcadKeepFocus (WPARAM, LPARAM) {
    return (TRUE) ;
}
// -----------------------------------------------------------------------------
BOOL CDialogSetka::OnInitDialog() 
{
    // Set the dialog name for registry lookup and storage
    CAcUiDialog::OnInitDialog();
    SetWindowText(L"ObjectARX for Dummies - Lab 2");

/*
    SetWindowText("ObjectARX for Dummies - Lab 2");
    m_select.AutoLoad();
    m_btn_apply.EnableWindow(FALSE);
*/
    
    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}
// -----------------------------------------------------------------------------
void CDialogSetka::OnBnClickedOk()
{
    CAcUiDialog::OnOK();
}

// -----------------------------------------------------------------------------
void CDialogSetka::OnBnClickedCansel()
{
  CAcUiDialog::OnCancel();
}

Re: 1 приложение ObjectARX

А что не так?

Re: 1 приложение ObjectARX

Проект собирается в ARX с применением ObjectArx 2011. При загрузке в AutoCAD 2011 загружается с выдачей об этом сообщения нормально. При загрузке команды CDSetka AutoCAD выходит на фатальную ошибку. Значит, тут и особо глубоких мыслей не нужно, что-то в коде или настройках компиляции. Хотя больше склоняюсь к ошибкам кода. А, вот что? Прошу помощи.

Re: 1 приложение ObjectARX

Запусти под отладчиком. По коду явных ошибок не видно.

Re: 1 приложение ObjectARX

Как это правильно сделать? Или, по крайней мере, почитать? Подскажите пожалуйста.

Re: 1 приложение ObjectARX

запускаешь Акад, запускаешь свой проект в ВС(visial studio), загружаешь скомпилированный проект в акаде, в ВС Debug-Attach to Process..-выбираешь процес акад.ехе(незабывая в Селект выбрать Натив) и жмешь Attach, затем ставишь БрейкПоинт(точку останова) на начало функции ЦДСетка и запускаешь эту комманду из Акада. ищи место где акад вываливается..

Re: 1 приложение ObjectARX

Согласно доброжелательных указаний Сергея Палюхина(за что ему отдельное Спасибо) получил следующее:

В разделе CallStack после строки "acad.exe!004d273f()" строка "[Frames below may be incorrect and/or missing, no symbols loaded for acad.exe]".

На сколько понимаю проблема с загрузкой пользовательской функции. Что ж делать дальше?
Тем более, если код вроде бы как правильный.

Re: 1 приложение ObjectARX

1. Проект был скомпилирован в Debug я надеюсь?
2. Ты поставил контрольную точку внутри функции AsdkArxProba_CDSetka?
3. Ты пошагово прошелся по этой функции?
4. Какую версию VS ты используешь?

Re: 1 приложение ObjectARX

Использую для окончательной сборки VS 2010.
Проект был скомпилирован в Debug.
Контрольную точку поставил на функцию AsdkArxProba_CDSetka.

Может проблема с передачей указателя из AutoCAD в пользовательское окно?

(изменено: Александр Ривилис, 21 ноября 2010г. 15:42:49)

Re: 1 приложение ObjectARX

EEEEEE85 пишет:

Использую для окончательной сборки VS 2010.

Не понял. Системные требования: VS 2008 SP1. VS 2010 теоретически воспользоваться можно, но только при наличии параллельно установленном VS 2008 SP1.

Re: 1 приложение ObjectARX

VS 2008 SP1 стоит. С ней проект не собирается.

Вот что получилось при хождении по функции:

+        dlg    {CDialogSetka hWnd=0x00000000}    CDialogSetka

Re: 1 приложение ObjectARX

При сборке VS 2008.


1>------ Rebuild All started: Project: ArxProba, Configuration: Debug Win32 ------
1>Deleting intermediate and output files for project 'ArxProba', configuration 'Debug|Win32'
1>Compiling...
1>StdAfx.cpp
1>c:\objectarx 2011\inc\acarray.h(95) : fatal error C1083: Cannot open include file: 'type_traits': No such file or directory
1>Build log was saved at "file://i:\User_All\User_VS_2008\ArxProba\Win32\Debug\BuildLog.htm"
1>ArxProba - 1 error(s), 0 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

(изменено: Александр Ривилис, 21 ноября 2010г. 16:09:45)

Re: 1 приложение ObjectARX

EEEEEE85 пишет:

VS 2008 SP1 стоит. С ней проект не собирается.

Плохо. Почему не собирается? Что-то ты сделал не то.
Давай по порядку.
1. Устанавливаешь ObjectARX SDK 2011
2. Инсталлируешь ObjectARX Wizard
3. Создаешь новый проект при помощи ObjectARX Wizard с указанием использовать MFC Extension
4. Создаешь диалог
Ну и так далее.
Должно все собираться.

EEEEEE85 пишет:

При сборке VS 2008.

Не установлен SP1 на VS 2008!!!

(изменено: Сергей Палюхин, 22 ноября 2010г. 21:24:04)

Re: 1 приложение ObjectARX

в какой именно строке вываливается акад(при трассеровке)?
по ВС 2008 должно компилиться

Re: 1 приложение ObjectARX

Сергей Палюхин пишет:

под какую версию акады пишешь? по ВС 2008 должно компилиться

Сергей. Перечитай тему. Эта информация уже была.

Re: 1 приложение ObjectARX

Всем большое спасибо за терпение и внимание!
Всё переставил. Заработало.

Re: 1 приложение ObjectARX

EEEEEE85 пишет:

Всё переставил. Заработало.

Ну и отлично!

(изменено: Алиса Гималтдинова, 22 декабря 2011г. 09:23:36)

Re: 1 приложение ObjectARX

Подскажите пожалуйста, в чем может быть проблема. Установив ObjectARX 2008 SP1 для AutoCAD2012,и указав пути к файлам настроек С:\ObjectARX 2012\inc ; C:\ObjectARX 20012\inc-win 32; C:\ObjectARX 2012\lib-win 32; C:\Program Files\Autodesk\ObjectArx Wizards for AutoCAd 2012\ArxAddIn....
Все равно не удается построить решение проекта, выдает 1ошибку С1083:не удается открыть файл include: adui.h: Нет такого файла или директории, хотя файл находится в папке inc. в чем может быть проблема?

(изменено: Александр Ривилис, 22 декабря 2011г. 14:32:02)

Re: 1 приложение ObjectARX

Алиса Гималтдинова пишет:

Установив ObjectARX 2008 SP1

Такого не существует. Объясните что и куда вы ставили. И внимательно посмотрите какие каталоги Вы подключили.