Создание экземпляра отчета через Com

отредактировано 17:53 Раздел: FastReport Studio
Пытаюсь использовать fastreports3.dll в portable приложении. По этой причине FastReport не зарегистрирован в системе.
Тем не менее, зная clsid, можно получать желаемые интерфейсы и использовать функционал FastReport. Но при создании экземпляра какого-либо объекта fastreports3.dll просто падает. Всё это смахивает на баг в FastReport.
Привожу пример кода:

HRESULT hr;
IClassFactory * pFactory = NULL;
IUnknown * pUnk = NULL;
IfrxReportPtr pReport = NULL;
CLSID ClsIdReport = __uuidof(TfrxReport);

if( !(m_hLib = ::LoadLibrary("fastreport3.dll")))
return false;
if(!(pfDllGetClassObject = (DllGetClassObjectProc)::GetProcAddress(m_hLib, "DllGetClassObject")))
return false;
//Указатель на фабрику мне выдают без проблем:
if(FAILED(hr = pfDllGetClassObject(ClsIdReport, IID_IClassFactory, (LPVOID*)&pFactory)) || pFactory == NULL)
return false;
//Дальше фабрика не хочет создавать никакого объекта и выдает сообщение про чтение по неверному адресу:
if(FAILED(hr = pFactory->CreateInstance(NULL, IID_IUnknown, (LPVOID*)&pUnk)) || pUnk == NULL)
return false;
if(FAILED(hr = pFactory->CreateInstance(NULL, IIdReport, (LPVOID*)&pReport)) || pReport == NULL)
return false;

Если же инсталлирую FastReport, то все работает. Использую пока что триальную версию fastreports3.dll.
Хотелось бы выяснить:
а) я что-то не так делаю
б) это баг fastreports3.dll
в) это фича, связанная с триальностью версии библиотеки. Но тогда у меня должна быть гарантия, что данный эффект не проявится на купленной FastReport

Спасибо за внимание.

Комментарии

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.