Re: Регистрация COM
От: lollipop  
Дата: 20.12.07 10:41
Оценка:
Здравствуйте, Vikong, Вы писали:
V>При регистрации напрямую, из программы, с помощью функции DllRegisterServer, регистрируется успешно, но при попытке создать объект из библиотеки, вылетает с ошибкой "OLE error code 0x80004005: Неопознанная ошибка"
Как это с помощью DllRegisterServer. ? Можете уточнить. С проблемой сталкивался регистрации нескольких длл из Wix и гуи. С гуи проблем небыло.
regsvr32 идёт с открытыми исходниками. Выдирал функцию оттуда. Вот по памяти может поможет


bool RegisterLibrary(CString dllName)
{
    int iReturn = 0;
    HRESULT (STDAPICALLTYPE * lpDllEntryPoint)(void);
    const char _szDllRegSvr[] = "DllRegisterServer";
    const char _szDllUnregSvr[] = "DllUnregisterServer";
    HINSTANCE _hInstance;
    BOOL bVisualC = FALSE;
    BOOL bUnregister = FALSE;
    LPCSTR pszDllEntryPoint = _szDllRegSvr;
    LPTSTR ptszDllEntryPoint = NULL;
    LPCTSTR pszDllName = NULL;
    LPCTSTR pszTok;
    size_t EntryPointSize = 0;
    _hInstance = ::GetModuleHandle(NULL);
    HINSTANCE hLib = LoadLibraryEx(dllName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
    if (hLib < (HINSTANCE)HINSTANCE_ERROR) 
      return false;
    // Find the entry point.
    (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, pszDllEntryPoint);

    if (lpDllEntryPoint == NULL) {
       return false;
    }

    // Call the entry point.
    if (FAILED((*lpDllEntryPoint)())) {
      return false;
    }
return true;
}

Смысл такой что загрухаем как длл. И вызываем DllRegisterServer. CString dllName — путь указывать полный дабы избежать траблов с вистой. У меня покрайней мере работал.
ЗЫ выдрано и перекопипастено из msdn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.