Mamy starą wersję C/C++ .dll, która jest zarejestrowana w COM. Nasi klienci mają zarówno klientów natywnych, jak i .NET, którzy używają tego .dll.Klient .NET crasch przy wymianie zarejestrowanego katalogu COM .dll na nowy w tej samej wersji .NET jako klient
Zbudowaliśmy nowy .NET .dll, aby zastąpić stary, tzn. Ich interfejs COM jest identyczny. Chcielibyśmy zastąpić starą .dll bez naszego klienta, aby przekompilować lub zrobić coś dla swoich klientów.
Dla klientów natywnych działa dobrze po prostu wyrejestrować starego .dll i zarejestrować nowy (z regasm). Działa również dla niektórych klientów .NET. Jednak w tych przypadkach zarówno klient, jak i nowy .dll jest skompilowany z tą samą wersją .NET, zgłasza wyjątek poniżej.
Innymi słowy, to działa:
.dll is .NET 3.5 -> client is .NET 4.0
.dll is .NET 4.0 -> client is .NET 3.5
.dll is any .NET -> Client is native
To rzuca exeption poniżej:
.dll is .NET 4.0 -> client is .NET 4.0
.dll is .NET 3.5 -> client is .NET 3.5
[A] BARAPIXLib.barcom5 nie mogą być oddane do [B] BARAPIXLib.barcom5.
Typ A pochodzi z 'BARAPIXLib, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' w kontekście 'LoadFrom' w lokalizacji C: \ arkiv \ S_BTW \ BTW \ BARAPIXWebService \ Barapix \ bin \ BARAPIXLib. dll ".
Typ B pochodzi od 'BartrackTest, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' w kontekście "Default" w lokalizacji 'C: \ arkiv \ Bartrack \ BartrackTest \ x86 \ Src \ BartrackTest \ bin \ x86 \ Release \ BartrackTest.exe”."}
Wszelkie pomysły będą mile widziane.
Czy istnieje szansa, że możemy zobaczyć deklarację odwołania do metody DLL, a także kod wywołujący? – pickypg
Masz na myśli, jak klienci nazywają nasze .dll? Nie jest to nam znane, ale prawdopodobnie zrobilibyśmy "Dodaj referencję" w Visual Studio. Chcemy zastąpić naszą starą wersję C/C++ COM .dll nową wersją .NET, bez konieczności ponownej kompilacji klientów lub czegokolwiek. Jeśli to możliwe. – Poppert