Wie Reg-Free COM (.Net) im C++ Builder verwenden?
-
Ich habe versucht eine .net 4.8 dll mittels COM in einem C++ Builder Projekt anzusprechen. Wichtig ist mir dabei, dass es ohne Registrierung der COM-DLL (Reg-Free COM) funktionieren soll. Ich bin dabei sehr viele Walkthroughs durchgegangen, habe noch den kleinsten Codeschnipsel gefühlt versucht und bin gescheitert.
Einen letzten Versuch habe ich dann doch noch mit folgenden Walkthrough versucht; Auf C#-Seite konnte ich mich daran auch gut halten:
https://learn.microsoft.com/en-us/previous-versions/dotnet/articles/ms973915(v=msdn.10)?redirectedfrom=MSDNAuf der C++ Builder Seite habe ich dann eine einfache VCL-Anwendung angelegt, und mir mittels tlibimp.exe C++ Code generieren lassen, und die beiden erzeugten *_TLB.cpp/h-Codeeinheiten eingebunden. Damit konnte ich auch den C++ Code fast 1:1 übernehmen und alles funktionierte bis zum Schritt 5 des Walkthroughs (noch mit registrierter dll) wunderbar.
Doch nach dem Ausführen der weiteren Schritte, kam ich immer in den Fehler das die COM-Klasse nicht registriert sei. Ich habe schon sehr viele Varianten von manifest-Dateien erstellt, sowohl auf C# als auch C++ Seite alles Mögliche an Einstellungen ausprobiert, ich bekomme es schlicht nicht hin.
Hat jemand bereits eine Reg-Free COM-DLL erfolgreich im C++ Builder zum Laufen gebracht und einen Tipp, was man dazu machen muss und wie die manifest-Dateien auszusehen haben?
cu André
-
Nachtrag: Ich bin inzwischen so weit, dass ich zumindest glaube es auf die "Side-by-Side"-Manifestdatei begrenzen zu können (Man muss für den Client eine solche manifest-Datei im Ausgabeverzeichnis bereitstellen. Ohne manifest-Datei gibt es entweder den Fehler das die Klasse nicht registriert ist, solange die dll nicht mit regasm registriert ist (mit Registrierung läuft es). Sobald die von mir erzeugte manifest-Datei im Verzeichnis liegt, gibt es nun eine Fehlermeldung das die Side-by-Side-Manifestdatei ungültig ist...
-
Zeige mal die "SideBySide.manifest".
Laut dem Artikel wird aber in "Step 9" empfohlen, diese in das C#-Projekt einzubetten. Aber wenn eine Fehlermeldung erscheint, dann wird wohl auch aktuell (ich nehme mal an, du verwendest Windows 10/11) die externe Datei unterstützt.