Wykorzystanie DLL - Klasa COM niezarejestrowana mimo rejestracji

0

Witam,
Dziś zmagam się z małym, ale pewnym wnerwiającym problemem.
Do działania tego programu nie jest to niezbędnego, ale wprowadza pewien 'ficzer', dzięki czemu wszystko działa lepiej i przyjemniej się używa, co do końcowych użytkowników jest ważne.
A więc, do sedna.
Pewna funkcja wymaga użycie biblioteki, niestandardowej firmy zewnętrznej (mam zgodę i ich pomoc, lecz nie wiedzą co może być nie tak). Wszystko się dzieje pod VS2010 Express C#. Podłączam się do tej biblitoteki DLL poprzez wybranie Referencji -> COM -> XXX.
Wszystko fajnie ładnie, mam funkcje które chce, ładuje ją sobie, ok. W kodzie wszystko gra.
W momencie uruchamiania wywala błąd:

Pobranie fabryki klasy COM dla składnika o identyfikatorze CLSID {2CE8566C-1152-485F-AA56-E29047238B09} nie powiodło się z powodu następującego błędu: 80040154 Klasa niezarejestrowana. (Wyjątek od HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Sprawdzam sobie ten CLSID w rejestrze. Jest, pod prawidłową nazwą, wszystko 'cacy'. Ale nie działa. Bibliotekę podłączam ustawiając ją tak, by się skopiowała z jakiegoś tam miejsca, do katalogu z programem i zamiast dostać plik 1,3 MB, tworzy DLL o rozmiarze 8 kB. Patrzę sobie tam, gdzie docelowo znajduje się XXX i jest tam taki plik, ale "TLB". (jest XXX.DLL i XXX.TLB)
Gdy ręcznie podpinam DLL (poprzez Browse) nie ma tam funkcji. Gdy podepnę TLB, wszystko jest. Wygląda więc na to, że do COM trafia TLB, zamiast DLL, chociaż pisze tam wyraźnie DLL.
Ponowna rejestracja DLL przez REGSVR32 nie daje rezultatu. Próbuję więc zarejestrować TLB poprzez REGASM i też nic, bo pisze, że to nieprawidłowa biblitoeka .NET. No tak, bo to biblioteka najprawdopodobniej C++.
Jak próbuję na siłę skopiować DLL do folderu z programem, to wyskakuje komunikat, że to niepoprawna biblioteka, wersja, format.
Spotkał się ktoś z czymś takim?
Jak to zarejestrować?

Dodam, że: system Windows 8.
Wcześniej, na XP i Win7 wszystko działało i ze sobą współgrało.

Pozdrawiam
AW

0

Takie problemy się pojawiają w przypadku 32 bitowych bibliotek na 64 bitowym systemie. Jeżeli biblioteka jest 32 bit, to musisz wywołać regsvr dla 32 bitowych bibliotek (chyba z katalogu SYSWOW64, ale nie jestem pewien. Akurat siedzę teraz na XP).

0

To też próbowałem. Także innych regsvr32. Bez efektu.
Jedynie co wydaje się pomagać to usunięcie z rejestru wpisu o tym CLSID i ponowna rejestracja (dowolnym regsvr32). Ale, gdy tylko użyję tej biblioteki pojawia się problem opisany wyżej.
Oczywiście wolałbym nie robić czyszczenia rejestru i każdorazowej rejestracji tych bibliotek po 1 użyciu. Szukam rozwiązania normalnego, permanentnego.

0

A czy COMów przypadkiem nie rejestruje się za pomocą polecenia regasm, a nie regsvr?
Tzn. ja mam takiego COMa, co to produkuje dwa pliki - jeden dll, a drugi tlb. Ten tlb załączam do referencji w szablonach Wordowych, ale by to zadziałało, muszę najpierw zarejestrować plik dll poleceniem:

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /Codebase [sciezka_do_pliku.dll]

Znaczenie też może mieć bitowość systemu/biblioteki: http://stackoverflow.com/questions/11322353/how-to-register-net-assembly-as-com

1 użytkowników online, w tym zalogowanych: 0, gości: 1