PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : .NET: tlbexp erzeugt unterschiedlichen output auf unterschiedlichen Rechnern


Elemental
2007-02-27, 13:11:47
Hallo zusammen,
ich habe ein kleines Problem mit COM interop in .NET VS2005.

Ich habe eine Class Library und deren Klassen haben auch COM Interfaces.

Bei den Projekt-Einstellungen ist die checkbox "register for COM interop" auch gesetzt, d.h. es wird beim compilieren immer eine typelib erzeugt.

Das Problem ist nun, dass sich die Gross-/Kleinschreibung teilweise unterscheidet, je nachdem auf welchem unserer build-Rechner übersetzt wird.

z.B. sieht ein Eintrag in der typelib auf dem einen Rechner so aus


[id(0x60020000), propget]
HRESULT id([out, retval] Siemens_SiplacePro_SPI_ComponentModel_Business_Types_CameraType* pRetVal);


und auf dem anderen so


[id(0x60020000), propget]
HRESULT ID([out, retval] Siemens_SiplacePro_SPI_ComponentModel_Business_Types_CameraType* pRetVal);


Beide computer haben ein deutsches WindowsXP und die gleiche Version von VS2005. Alle einstellungen sind soweit ich das gesehen habe identisch.

Also wie kann es dann diese unterschiedlichen TypeLibs geben :confused:


mfG

Elemental
2007-02-27, 14:57:28
Ich habe hier eine nette kleine Bemerkung bei der Doku zu tlbexp.exe gefunden:
http://msdn2.microsoft.com/en-gb/library/hfzzah2c(VS.80).aspx


The reason for the /names option is that type libraries store each identifier in a case-insensitive table. The first case encountered wins. So a class called Monitor might end up being exposed as "monitor" if there's a parameter with such a name encountered first. (And the order in which identifiers are encountered can vary simply by recompiling your assembly!) /names can guarantee stable casing.


Aber wie erzeuge ich so eine names-Datei? Wie muss diese Datei aufgebaut sein? Bisher hab ich dazu noch keine Beispiele gefunden...

Elemental
2007-02-27, 15:47:30
Ich glaub, ich habs. Das ürsprüngliche Problem scheint das hier zu sein:
http://support.microsoft.com/default.aspx?scid=kb;en-us;220137

When there are two identifiers that differ only by case, the case of the second identifier is changed to reflect the case of the first.



Mit einer names-Datei lässt sich das Problem lösen. Das ist eine einfache Textdatei, mit in meinem Fall nur einer Zeile:
ID