Тема: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

В ARX 2007 есть класс AdHostImageAppServices, вызвав его метод imageFileExtensions я могу получить строку с расширениями поддерживаемых форматов файлов изображений, разделенными точкой с запятой.
В ARX 2000 и 2004 такого класса нет. Однако в либах acISMobj15.lib и acISMobj16.lib соответственно есть функция getImageFileExtensions, которой нет в заголовочных файлах SDK.
Могу ли я и как, если могу, подключить и использовать данную функцию?
Есть ли другое решение, если необходимо получить набор данных расширений файлов с помощью arx 2000, 2004, 2007?

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

Как дополнение к вопросу.
Да, можно взять список расширений из диалога по команде imageattach, но, насколько я понял, начиная с AutoCAD 2007 можно регистрировать кодеки и добавлять поддерживаемые форматы изображений, т.е. их список будет меняться.
Пока мне не известно можно ли подобное делать в предыдущих версиях AutoCAD.

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

Ты был на пути к цели, но до нее не дошел:

typedef void (GETIMAGEFILEEXTENSIONS)(char *);
static const char ModuleName[] = "acismobj16.dbx"; // AutoCAD 2004...2006
// static const char ModuleName[] = "acismobj15.dbx"; // AutoCAD 2000...2002
  static void ImageUtilGetImgExt(void)
  {
    acrxLoadModule(ModuleName,false);
    HMODULE hDll = ::LoadLibrary(ModuleName);
    if (hDll) {
       GETIMAGEFILEEXTENSIONS *ptr = (GETIMAGEFILEEXTENSIONS *)GetProcAddress(hDll,"?getImageFileExtensions@ISMUtils@@SAXPAD@Z");
       if (ptr) {
         char buf[4096]="";  ptr(buf);
         acutPrintf("\nExts: %s",buf);
       }
    }
  }

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

> Александр Ривилис
Спасибо большое, Александр!

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

> Александр Ривилис
Пытаюсь получить список расширений поддерживаемых форматов файлов изображений в AutoCAD 2008 (SDK 2007) по Вашему примеру:

typedef ACHAR ADCHAR;
#define _ADT _ACRX_T
typedef void (GETIMAGEFILEEXTENSIONS)(ADCHAR *);
static const ADCHAR ModuleName[] = _ADT("acismobj17.dbx");
static void ImageUtilGetImgExt(void)
{
    acrxLoadModule(ModuleName, true); //return true    
    HMODULE hDll = ::LoadLibrary((LPCSTR)ModuleName);
    if (hDll) /* false */ {
        GETIMAGEFILEEXTENSIONS *ptr = (GETIMAGEFILEEXTENSIONS *)GetProcAddress(hDll,(LPCSTR)_ADT("?getImageFileExtensions@ISMUtils@@SAXPA_W@Z"));
        if (ptr) {
            ADCHAR buf[4096]=_ADT("");  ptr(buf);
            acutPrintf(_ADT("\nExts: %s"), buf);
        }
    }    
}

Однако, LoadLibrary отрабатывает неудачно. Подскажите, пожалуйста, где я мог ошибиться.

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

IMHO необходимо вызывать ::LoadLibraryW

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

Эти строки:

HMODULE hDll = ::LoadLibrary((LPCSTR)ModuleName);
GETIMAGEFILEEXTENSIONS *ptr = (GETIMAGEFILEEXTENSIONS *)GetProcAddress(hDll,(LPCSTR)_ADT("?getImageFileExtensions@ISMUtils@@SAXPA_W@Z"));

должны выглядеть так:

HMODULE hDll = ::LoadLibraryW((LPCTSTR)ModuleName);
GETIMAGEFILEEXTENSIONS *ptr = (GETIMAGEFILEEXTENSIONS *)GetProcAddress(hDll,"?getImageFileExtensions@ISMUtils@@SAXPA_W@Z");

Re: Список расширений поддерживаемых форматов изображений для AutoCAD 2000-2008.

> Александр Ривилис
Спасибо, Александр. Работает.