Ich habe eine .NET-DLL, die einige Schnittstellen \ Klassen, die com ausgesetzt sind. Während der Erstellungsprozedur wird eine TLB-Datei generiert und auf diese TLB wird durch einen C++ - Code verwiesen. Als Ergebnis erzeugt der Compiler eine TLH-Datei für die TLB..tlh generiert auf 2 Maschinen ist anders
Wenn ich den Build lokal ausführen, endet eine der Eigenschaften in einer der Schnittstellen mit einer entsprechenden Methode in der TLH, die nicht den gleichen Namen hat. Die Eigenschaft in dem .NET-Code wird als PropertyA bezeichnet und heißt get_propertyA, während PropertyB mit dem Namen get_PropertyB endet. Ich habe kein Auge zugedrückt, als dies passierte, habe einfach die Methode wie in der TLH definiert verwendet und angenommen, dass alles gut war, aber als ich diese Änderungen vorgenommen habe, funktionierte der Build für niemanden sonst, da der Compiler Eigenschaften namens get_PropertyA und get_PropertyB (Kündigungsfall bei PropertyA).
Die auf beiden Rechnern erzeugten tlb-Dateien sind identisch (nach einem Hex-Vergleich) und die tlh-Dateien werden beide von der gleichen Compiler-Version erzeugt.
Die Build-Prozedur erstellt den TLB, indem Sie: path \ to \ mydll.tlb Ausgabe \
Irgendwelche Ideen, warum meine lokale Version endet mit einer Eigenschaft: regasm Pfad \ dll \ Mydll.dll -tlb \ mit dem falschen Namen? Oder was kann ich tun, um es zu reparieren?
UPDATE: Ich habe gelesen, dass tlbexp die erste Version der Zeichenfolge verwenden wird, die es findet und die mit einer Neukompilierung ändern kann. Obwohl ich tlbexp nicht verwende, habe ich mich gefragt, ob das das Problem war. Ich fand Parameter mit dem gleichen Namen wie meine Methode (in anderen Methoden), aber mit einem Kleinbuchstaben am Anfang. Also habe ich all diese ersetzt. Neu gebaut, keine Veränderung. SO habe ich dann meine COM-Methode umbenannt. Re-Built und hat die erwarteten fehlenden Methodenfehler erhalten. Die Methode wurde wieder in den ursprünglichen Namen umbenannt, und hey presto schien es behoben zu sein. Da es jetzt zu funktionieren scheint und ich es nicht wieder zum Scheitern bringen kann, kann ich die vorgeschlagenen Lösungen nicht ausprobieren, aber ich mag die Umbenennungsidee, falls dies in der Zukunft passieren sollte.
Seien Sie vorsichtig, wenn Sie die Umgehung "Umbenennen" verwenden - es funktioniert wie eine einfache Textersetzung und kann manchmal zu seltsamen Ergebnissen führen. Ich habe die Antwort aktualisiert, um das zu skizzieren. – sharptooth
danke für die heads-up. Ich werde das berücksichtigen, wenn Probleme auftauchen. –