length = fileText. GetLength();

char *strBuff = new char[length];

fileText. Read(strBuff, length);

fileText. Close();

CString cstrBuff(strBuff);

delete strBuff;

cstrBuff. SetAt(length, ’\0’);

cstrBuff. FreeExtra();

return cstrBuff;

}

void CAsdkDcContent::OpenAndDisplayTextFile()

{

DWORD length;

CString cstrBuff = OpenAndReadTextFile(length);

BSTR bstrBuf = cstrBuff. AllocSysString();

m_pBrowser->SetItemDescription(bstrBuf);

::SysFreeString(bstrBuf);

}

STDMETHODIMP CAsdkDcContent::PaletteItemClick(BSTR bstrItemText)

{

USES_CONVERSION;

m_strSelectedItemText = OLE2T(bstrItemText);

OpenAndDisplayTextFile();

return S_OK;

}

void CAsdkDcContent::OpenAndInsertTextFile()

{

DWORD length;

CString cstrBuff = OpenAndReadTextFile(length);

cstrBuff. Replace("\015\012", "\\P");

struct resbuf resbufViewCtr;

resbufViewCtr. restype = RT3DPOINT;

acedGetVar("VIEWCTR", &resbufViewCtr);

AcGePoint3d pt(resbufViewCtr. resval. rpoint[X],

resbufViewCtr. resval. rpoint[Y],

resbufViewCtr. resval. rpoint[Z]);

AcDbMText *pMText = new AcDbMText();

pMText->setLocation(pt);

pMText->setContents(cstrBuff);

append(pMText);

pMText->downgradeOpen();

pMText->draw();

pMText->close();

}

STDMETHODIMP CAsdkDcContent::PaletteItemDblClick(

BSTR bstrItemText)

{

USES_CONVERSION;

m_strSelectedItemText = OLE2T(bstrItemText);

OpenAndInsertTextFile();

return S_OK;

}

STDMETHODIMP CAsdkDcContent::PaletteColumnClick(

VARIANT varIndex)

НЕ нашли? Не то? Что вы ищете?

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::PaletteMouseUp(

VARIANT varButton,

VARIANT varItemTexts,

VARIANT varX,

VARIANT varY)

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::PaletteMouseDown(

VARIANT varButton,

BSTR bstrFullText,

VARIANT varX, VARIANT varY)

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::RenderPreviewWindow(

BSTR bstrFullText,

VARIANT varhPreviewWindow)

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::PreviewMouseUp(

VARIANT varButton,

VARIANT varX,

VARIANT varY)

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::Refresh()

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::PaletteBeginDrag(

VARIANT varItemTexts,

VARIANT varX,

VARIANT varY)

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::ReleaseBrowser()

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::QueryContextMenu(

VARIANT varhMenu,

VARIANT varIndex,

VARIANT varCmdFirst,

VARIANT varCmdLast,

VARIANT varItemTexts)

{

return S_OK;

}

STDMETHODIMP CAsdkDcContent::InvokeCommand(VARIANT varMenuID)

{

return S_OK;

}

STDMETHODIMP

CAsdkDcContent::IsExpandable(

/* [string][in] */ BSTR bstrItemText,

/* [retval][out] */ VARIANT __RPC_FAR *pvarIsExpandable)

{

pvarIsExpandable->iVal = TRUE;

return S_OK;

}

STDMETHODIMP

CAsdkDcContent::GetLargeImage(

/* [in] */ BSTR bstrFileName,

/* [out][in] */ VARIANT __RPC_FAR *pvarhLargeImage)

{

return E_NOTIMPL;

}

STDMETHODIMP

CAsdkDcContent::GetSmallImageListForContent(

BSTR bstrFileName,

VARIANT *pvarhImageList)

{

return E_NOTIMPL;

}

STDMETHODIMP

CAsdkDcContent::GetLargeImageListForContent(

BSTR bstrFileName,

VARIANT *pvarhImageList)

{

return E_NOTIMPL;

}

7 Теперь включают соответствующие файлы заголовка в sdtafx. h файл. Вы будете также должны добавить определение, чтобы неопределить _DEBUG, так как библиотеки AutoCAD - не-отладка. Имеется то, что файл должен напомнить:

#if defined(_DEBUG) && !defined(ARX_DEBUG)

#undef _DEBUG

#define ARX_DEBUG

#endif

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#define STRICT

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x0400

#endif

#define _ATL_APARTMENT_THREADED

#include <afxwin. h>

#include <afxdisp. h>

#include <atlbase. h>

// You may derive a class from CComModule and use

// it if you want to override something, but do not

// change the name of _Module.

//

extern CComModule _Module;

#include <atlcom. h>

#include <atlwin. h>

#include <adslib. h>

#include <dbmain. h>

#include <dbsymtb. h>

#include <dbmtext. h>

#include <acdocman. h>

#include <aced. h>

#include <rxregsvc. h>

#ifdef ARX_DEBUG

#undef ARX_DEBUG

#define _DEBUG

#endif

Часть 6. Библиотеки ObjectARX

Глава 25. Библиотеки ObjectDBX

ObjectDBX - преемник Отключенного DWG, и эта глава описывает изменения и расширения, что ObjectDBX SDK обеспечивает, наряду с описанием того, как осуществить приложения, использующие ObjectDBX.

    Введение Использование ObjectDBX Различия между ObjectDBX и ObjectARX Локализация и XMX Файлы Управление Транзакции Создание Средства просмотра Загрузка Требования Установка ObjectDBX Библиотек Советы и технические приемы Известные Ограничения

Введение

ObjectDBX SDK - интерфейс среди ведущих приложений, рисуя (.dwg) файлы, заказное приложение (.arx) файлы, и заказной объект (.dbx) файлы.

Краткий обзор

ObjectDBX включает набор DLLS, который может использоваться, чтобы осуществить заказные объекты, содержащиеся в чертежном файле AutoCAD 2000, и осуществлять приложения, которые управляют DWG файлами без присутствия AutoCAD. Часть этой возможности была прежде представлена в DWG, отключенное изделие{*программа*}, но ObjectDBX SDK заменяет и идет вне DWG Отключенная технология, обеспечивая поддержку, необходимую для интеллектуальных объектных систем. ObjectDBX SDK позволяет Вам создавать приложения главного компьютера не-автохама, которые могут читать и записывать DWG файлы.

Ведущие Приложения

“ Host-приложение” является тем, который содержит main(), WinMain (), или dllMain () в своем коде, и обеспечивает ведущие услуги, в которых программа ObjectDBX или ObjectARX нуждается.

Имеются два типа ведущих приложений, которые могут воспользоваться преимуществом интерфейса ObjectDBX, обеспечивает. Один тип ведущего приложения - AutoCAD 2000, с или без связанных ObjectARX-приложений. Второй тип – host-приложение не-AutoCAD’a, - не может загружать ObjectARX-приложение, и может только воспользоваться преимуществом определенных интерфейсов, обеспеченных DLL, содержащимся в ObjectDBX.

ObjectDBX Библиотеки

ObjectDBX библиотеки содержат сведения, которые позволяют заказным объектам (геометрия, компоненты, не-графические объекты, и так далее) работать как расширения или заказные объекты внутреннего AutoCAD. Файлам, которые осуществляют эти объекты, дают расширение. dbx, который замещает расширение Базы данных. DBX файл - в основном ObjectARX-приложение, которое было написано, чтобы работать с ObjectDBX библиотеками вместо с ObjectARX библиотеками (AutoCAD).

Интерфейс пользователя и Доступ к базе данных

ObjectDBX позволяет Вам записывать отдельный binaries для интерфейса пользователя (UI) и базы данных (DB) части вашего приложения. Файл, содержащий UI компонент имел бы расширение. arx и будет содержать код, который выпускает подсказки, отображает диалоги, изменяет меню в AutoCAD, и т. д.

DB составляющий файл имел бы расширение. dbx и будет содержать код, который осуществляет ваши заказные объекты, создавая их, отображая их, преобразовывая их, и так далее. Если ваше приложение отделено в интерфейс пользователя и части базы данных, ваши заказные объекты будут все еще обрабатываться должным образом без ObjectARX-приложения, которое обеспечило интерфейс пользователя, являющийся существующим.

Например, предположите, что Вы осуществляете заказной объект по имени “Слив”, и что код, чтобы отображать и изменить Слив находится в sink. dbx, в то время как код, чтобы запросить пользователя относительно значений создания Слива находится в sink. arx. Ваш пользователь может загружать sink. arx от AutoCAD и использовать это (с sink. dbx, который будет загружен автоматически) чтобы создать заказной слив в рисунке. Позже, это, рисунок может быть загружен любым другим приложением главного компьютера (включая AutoCAD), и если пользователь имеет копию sink. dbx доступного файла, объекты Sink, отобразит должным образом, вместо как proxies.

Использование ObjectDBX

Разработка приложений с ObjectDBX очень похожа к развивающимся приложениям с ObjectARX. API C++, найденный в иерархии классов ObjectARX - в значительной степени тот же самый в ObjectDBX. Ваша основная задача как разработчик должна понять точно, какое подмножество ObjectARX является в вашем распоряжении.

Начало с ObjectDBX

Следующее - некоторые общие пункты, Вы должны знать перед использованием ObjectDBX.

C-библиотеки времени выполнения

Выпуск DLLs для ObjectDBX связан с выпускаемыми версиями Библиотеки поддержки C Microsoft, MSVCRT. dll. Ваше приложение должно также связать с выпускаемой версией, а не отладочную версию. При смешивании выпуска и отладки или статический и комбинаций DLL C библиотеки Времени выполнения могут вызывать ошибки освобождения или распределение памяти.

Параллельные процессы

В то время как ObjectDBX DLLs поддерживают множественные процессы на Windows NT и Windows 95, они не были сделаны безопасными потока.

AcDbDatabase

Всегда инициализируйте AcDbDatabase перед использованием любых функций AcDb. Обратитесь к “Инициализация AcDbDatabas ” на странице 676.

ObjectDBX Библиотечные Изменения

Много библиотек были переименованы, чтобы включить их номер версии. В добавлении, имеются несколько новых библиотек. Следующие перекрестные ссылки таблицы новые и старые библиотечные названия.

ObjectDBX библиотеки

Release 14 Library Name

AutoCAD 2000 Library Name

acfirst. dll

ac1st15.dll

ism. lib

acISMobj15.lib

libacge. lib

acge15.lib

libacgex. lib

acgex15.lib

libacbr. lib

acbr15.lib

Not present

achapi15.lib

Not present

acdb15.lib

Not present

acrx15.lib

Not present

acutil15.lib

При соединении ведущих приложений, убедитесь, что связали acdb15.lib сначала, rxapi. lib вторым и любые другие библиотеки впоследствии.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132