win2k ищет ActiveX по короткому имени (формат Дос 8.3)
От: m16  
Дата: 17.11.05 17:04
Оценка:
win2k ищет ActiveX по короткому имени (формат Дос 8.3) смотри лог-файл ниже.
Проблема:
Короткие имена одной DLL и соответствующей ей TLB не совпадают (TLB не линкуется к DLL, так исторически сложилось да и еще проект в виде makefile). В результате ОС не находит TLB-ик и COM-объект не работает.

Вопрос: Кто с этим сталкивался? Как заставить ОС искать компоненты по длинному имени?



4:01:57 PM    OutInvoice.exe:1456    QUERY INFORMATION    D:\cis\activex\OL1639~1.DLL    SUCCESS    Attributes: A    
4:01:57 PM    OutInvoice.exe:1456    OPEN    D:\cis\activex\OL1639~1.DLL    SUCCESS    Options: Open  Access: Execute    
4:01:57 PM    OutInvoice.exe:1456    QUERY INFORMATION    D:\cis\activex\OL1639~1.DLL    SUCCESS    Length: 57344    
4:01:57 PM    OutInvoice.exe:1456    CLOSE    D:\cis\activex\OL1639~1.DLL    SUCCESS        
4:01:57 PM    OutInvoice.exe:1456    QUERY INFORMATION    D:\cis\activex\OL1639~1.DLL    SUCCESS    Attributes: A    
4:01:57 PM    OutInvoice.exe:1456    OPEN    D:\cis\activex\OL1639~1.DLL    SUCCESS    Options: Open  Access: Execute    
4:01:57 PM    OutInvoice.exe:1456    CLOSE    D:\cis\activex\OL1639~1.DLL    SUCCESS        
4:01:57 PM    OutInvoice.exe:1456    OPEN    D:\cis\activex\OL1639~1.TLB    NOT FOUND    Options: Open  Access: All
Re: win2k ищет ActiveX по короткому имени (формат Дос 8.3)
От: aik Австралия  
Дата: 17.11.05 17:15
Оценка:
Здравствуйте, m16, Вы писали:

m16>win2k ищет ActiveX по короткому имени (формат Дос 8.3) смотри лог-файл ниже.

m16>Проблема:
m16>Короткие имена одной DLL и соответствующей ей TLB не совпадают (TLB не линкуется к DLL, так исторически сложилось да и еще проект в виде makefile). В результате ОС не находит TLB-ик и COM-объект не работает.

m16>Вопрос: Кто с этим сталкивался? Как заставить ОС искать компоненты по длинному имени?


А в реестре в CLSID эта DLL с коротким именем или длинным?
Re[2]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: m16  
Дата: 17.11.05 17:22
Оценка:
Здравствуйте, aik, Вы писали:

aik>Здравствуйте, m16, Вы писали:


m16>>win2k ищет ActiveX по короткому имени (формат Дос 8.3) смотри лог-файл ниже.

m16>>Проблема:
m16>>Короткие имена одной DLL и соответствующей ей TLB не совпадают (TLB не линкуется к DLL, так исторически сложилось да и еще проект в виде makefile). В результате ОС не находит TLB-ик и COM-объект не работает.

m16>>Вопрос: Кто с этим сталкивался? Как заставить ОС искать компоненты по длинному имени?


aik>А в реестре в CLSID эта DLL с коротким именем или длинным?



Да только сейчас заметил. Короткое имя. А почему? Что делать?
Re[3]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: aik Австралия  
Дата: 17.11.05 17:24
Оценка:
Здравствуйте, m16, Вы писали:

m16>>>win2k ищет ActiveX по короткому имени (формат Дос 8.3) смотри лог-файл ниже.

m16>>>Проблема:
m16>>>Короткие имена одной DLL и соответствующей ей TLB не совпадают (TLB не линкуется к DLL, так исторически сложилось да и еще проект в виде makefile). В результате ОС не находит TLB-ик и COM-объект не работает.
m16>>>Вопрос: Кто с этим сталкивался? Как заставить ОС искать компоненты по длинному имени?
aik>>А в реестре в CLSID эта DLL с коротким именем или длинным?
m16>Да только сейчас заметил. Короткое имя. А почему? Что делать?

почему — не знаю. вызывай regsvr32 с длинным именем для начала
Re[4]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: m16  
Дата: 17.11.05 17:27
Оценка:
aik>почему — не знаю. вызывай regsvr32 с длинным именем для начала

Не помогло.
Re: win2k ищет ActiveX по короткому имени (формат Дос 8.3)
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 17.11.05 17:28
Оценка:
Здравствуйте, m16, Вы писали:

m16>Вопрос: Кто с этим сталкивался? Как заставить ОС искать компоненты по длинному имени?


видимо они так зарегистрированы в реестре, с короткими именами. т.е. такое имя было подсунуто regsvr32. Как регистрировались компоненты?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: aik Австралия  
Дата: 17.11.05 17:32
Оценка:
Здравствуйте, m16, Вы писали:

aik>>почему — не знаю. вызывай regsvr32 с длинным именем для начала

m16>Не помогло.

regsvr32 "bla bla bla.dll" приводит к тому что в реестре короткое имя? Грохни ключ (или дерегистри старую) и повтори. У меня в реестр попадает длинное имя.
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;
}
Re[3]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 17.11.05 17:45
Оценка:
Здравствуйте, m16, Вы писали:

OE>>видимо они так зарегистрированы в реестре, с короткими именами. т.е. такое имя было подсунуто regsvr32. Как регистрировались компоненты?


m16>
m16>int CMainFrame::RegisterDLLandOCX(CString strOleServerFile)
m16>{
      
m16>    LPCSTR pszDllName = strOleServerFile;
m16>


здесь в pszDllName имя длинное?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: m16  
Дата: 17.11.05 17:47
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>Здравствуйте, m16, Вы писали:


OE>>>видимо они так зарегистрированы в реестре, с короткими именами. т.е. такое имя было подсунуто regsvr32. Как регистрировались компоненты?


m16>>
m16>>int CMainFrame::RegisterDLLandOCX(CString strOleServerFile)
m16>>{
      
m16>>    LPCSTR pszDllName = strOleServerFile;
m16>>


OE>здесь в pszDllName имя длинное?


Да
Re[5]: win2k ищет ActiveX по короткому имени (формат Дос 8.3
От: aik Австралия  
Дата: 17.11.05 17:53
Оценка: +1
Здравствуйте, m16, Вы писали:

OE>>>>видимо они так зарегистрированы в реестре, с короткими именами. т.е. такое имя было подсунуто regsvr32. Как регистрировались компоненты?

m16>>>
m16>>>int CMainFrame::RegisterDLLandOCX(CString strOleServerFile)
m16>>>{
  
m16>>>    LPCSTR pszDllName = strOleServerFile;
m16>>>

OE>>здесь в pszDllName имя длинное?
m16>Да

значит, кривая реализация DllRegisterServer в самой DLL. Небось, MFC?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.