Бесплатная регистрация и рассылка LPPICTUREDISP

Это мой интерфейс COM:

[id(2)] boolean Init(BSTR User, BSTR Password);
[id(3)] boolean SetBitmap(BSTR szObjectType, IPictureDisp* szBitmap);

Следующие Init() Функция работает, если интерфейс COM зарегистрирован, или же с манифестами приложения, использующими параллельные сборки (sxs).

Init(LPCTSTR User, LPCTSTR Password)
{
BOOL result;
static BYTE parms[] =
VTS_BSTR VTS_BSTR;
InvokeHelper(0x2, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,
User, Password);
return result;
}

Однако следующее SetBitmap() Функция работает только в том случае, если зарегистрирован интерфейс COM!

BOOL SetBitmap(LPCTSTR szObjectType, LPPICTUREDISP szBitmap)
{
BOOL result;
static BYTE parms[] =
VTS_BSTR VTS_DISPATCH;
InvokeHelper(0x3, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,
szObjectType, szBitmap);
return result;
}
  • Если я использую интерфейс COM, настроенный с помощью манифестов приложения, вызов функции завершается с ошибкой E_UNEXPECTED

  • Если я заменю VTS_DISPATCH с VTS_BSTRвызов функции успешен и работает. В этом случае похоже, что диспетчер не может отправить объект.

Есть идеи о том, что происходит?

3

Решение

IPictureDisp Параметр не является проблемой для регистрации свободного COM.

То, что кажется неправильным, это способ создания манифеста XML. Если ваш IDL определен для ActiveX DLL, а библиотека имеет фактический TLB, тогда ваш двоичный манифест клиента должен иметь ссылку, а не манифест DLL:

<dependentAssembly>
<assemblyIdentity name='dlgd' type='win32' version='6.0.0.0'
processorArchitecture='amd64' />
<file name="dlgd.ocx" hashalg="SHA1">
<comClass clsid="{guiD}" tlbid="{guiD}" description="sDlg Control"/>
<typelib tlbid="{guiD}" version="1.0" helpdir=""/>
</file>
</dependentAssembly>

Также, boolean Типы результатов метода IDL обычно должны быть HRESULTвместо. Есть и другие проблемы (как указано другими), а также ваш реальный неопубликованный код может иметь даже дополнительные проблемы. Тем не менее, случай, как вы объяснили, может работать нормально, если вы исправите манифест, вы можете использовать RegFreeComPictureDisp решение с вашими фрагментами кода (клиент, сервер, IDL, отрывок из манифеста) в качестве справки для исправления вашего проекта (Trac, диверсия).

4

Другие решения

наконец то сумасшедшая ошибка
у нас есть CEF (хромированный) компонент. и он был инициализирован без объекта CEfApp. и вот тут действительно безумная проблема: ActiveX с регистрацией работает нормально. без него проблема отправки. после обычной инициализации CEF (или с отключенной инициализацией CEF) это работает в обоих случаях!

0

По вопросам рекламы [email protected]