Re[2]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: m16  
Дата: 17.11.05 17:32
Оценка:
OE>видимо они так зарегистрированы в реестре, с короткими именами. т.е. такое имя было подсунуто regsvr32. Как регистрировались компоненты?


int CMainFrame::RegisterDLLandOCX(CString strOleServerFile)
{
      
    LPCSTR pszDllName = strOleServerFile;
    HRESULT (STDAPICALLTYPE * lpDllEntryPoint)(void);

    SetErrorMode(SEM_FAILCRITICALERRORS);     

    // Загрузка библиотеки
    HINSTANCE hLib = LoadLibraryEx(pszDllName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);

    if (hLib < (HINSTANCE)HINSTANCE_ERROR) {
        TCHAR szError[12];
        wsprintf(szError, _T("0x%08lx"), GetLastError());
        DisplayMessage(IDS_LOADLIBFAILED, pszDllName, szError,FALSE,FALSE);
        return -1;
    }

    // Определяем точку входа.
    (FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, "DllRegisterServer");

    if (lpDllEntryPoint == NULL) {
        TCHAR szExt[_MAX_EXT];
        _tsplitpath(pszDllName, NULL, NULL, NULL, szExt);

        if ((_stricmp(szExt, ".dll") != 0) && (_stricmp(szExt, ".ocx") != 0))
            DisplayMessage(IDS_NOTDLLOROCX, pszDllName, "DllRegisterServer",FALSE,FALSE);
        else
            DisplayMessage(IDS_NOENTRYPOINT, pszDllName, "DllRegisterServer",FALSE,FALSE);

        return -1;
    }

    // Вызываем функцию
    if (FAILED((*lpDllEntryPoint)())) {
        DisplayMessage(IDS_CALLFAILED, "DllRegisterServer", pszDllName,FALSE,FALSE);
        return -1;
    }

    FreeLibrary(hLib);

    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.