Müssen Sie Nachbearbeiten eine C ++ DLL / h / lib / xml / exe basierten SDK in eine COM in einem C # 2.0-Projekt zu verwenden,

StackOverflow https://stackoverflow.com/questions/417146

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe nur ein SDK aus C ++ dll, lib, exe und verschiedenen H-Dateien übergeben. Ich nehme es für C ++ Entwickler gedacht ist. Die Beispielprojekte sie mit ihrer Dokumentation zur Verfügung stellen alle in C ++ geschrieben. Ich bin in der Lage, sie mit Visual Studio 8 (2005), und führen sie spin up. Sie tun das Gerät steuern, wie in der Werbung. Doch das Projekt dies ist in C # .Net verwendet werden muss 2.0 und das ist unveränderlich.

Mein Chef war ein C ++ Entwickler und sagt alles, was ich tun muß, ist es als ein COM-Objekt zu kompilieren und dann das COM-Objekt in meine C # Lösung importieren. Mein Chef sagt, dass es weniger als eine Stunde dauern soll, um „wrap“ dort als COM-Objekt SDK, auch für mich ohne Kenntnis von C ++ kompiliert wird.

I-COM-Objekte in C # Lösungen vor, um einmal verwendet habe diese gemacht wird, kann ich ohne Probleme von dort aus weiter auf.

Allerdings weiß ich nicht, was das COM-Objekt von den zwei DLL-Dateien zu tun zu machen, 1 .exe, 1 LIB-Datei, 1 .xml-Datei, und die 12 h-Dateien. Gibt es eine Ressource zur Verfügung, mir zu sagen, was dies tun zu machen?

War es hilfreich?

Lösung

  

Mein Chef war ein C ++ Entwickler und sagt alles, was ich tun muß, ist es als ein COM-Objekt zu kompilieren und dann das COM-Objekt in meine C # Lösung importieren.

Das ist wahr, aber es als COM-Objekt kompiliert ist „schwierig“ (von denen ich meine, dass Sie es nicht tun), wenn es bereits den COM-APIs implementiert (wenn es doesn‘ t, dann müssen Sie den COM-APIs implementieren, bevor Sie es als COM-Objekt bauen).

Es gibt Bücher (zB Essentielle COM ), die erklären, wie man COM-Objekte unter Verwendung von C ++ zu erstellen, aber es ist nicht trivial (für den Aufbau von COM-Objekten vorhanden sein können bessere Bücher als Wesentliches COM und besser / einfache Werkzeuge als C ++).

Ich glaube, Sie und / oder Ihr Chef haben 3 Optionen:

  1. Fragen Sie den Verkäufer sie Ihnen als COM-Objekte zu geben
  2. ein COM API Design, das die SDK-API wickeln würde. Erstellen Sie ein COM-Projekt (in der Sprache Ihrer Wahl), die diese API exportiert. Umsetzung dieser APIs durch die darunter liegende SDK Methoden aufrufen. Um dies zu tun Sie können jemanden brauchen, der C ++ kennt, oder bereit sein, viel Geld ausgeben, viel länger als „eine Stunde“ an diesem Projekt.
  3. Vergessen Sie COM verwenden; stattdessen bauen das SDK als DLL, und verwenden Sie PInvoke es von .NET-Code aufzurufen.
  

Mein Chef sagt, dass es weniger als eine Stunde dauern soll, um „wrap“ dort als COM-Objekt SDK, auch für mich ohne Kenntnis von C ++ kompiliert wird.

Nach dem, was Sie gesagt haben, weiß ich nicht von irgendeiner Weise das geschehen zu machen.

Andere Tipps

Sagen Sie Ihren Chef, wenn es ihn weniger als eine Stunde dauern würde, es einpacken, er sicherlich sollte es tun. Es wäre eine effizientere Nutzung der sowohl Ihre Zeit sein

Ich würde auch vorschlagen ATL (nicht Attribute verwenden), aber das ist etwas, was einige Zeit dauern kann, richtig zu machen, wenn Sie nicht erfahren sind.

  

Mein Chef sagt, soll es dauert weniger als   eine Stunde, um „wrap“ dort als ein SDK up   COM-Objekt, auch für mich mit nein   Kenntnisse in C ++ kompiliert wird.

Das mag für einen erfahrenen C ++ / COM-Entwickler, aber nicht für einen Anfänger wahr sein. Ich denke, Ihre beste Wette ist, ATL zu verwenden. Werfen Sie einen Blick auf die MSDN Tutorial .

und nicht Verwendung Attribute.

Das ist nicht ganz die Antwort auf Ihre Frage, aber ...

Eine Option anstatt zu versuchen, ein COM-Objekt zu machen, ist P / Invoke zu verwenden und nur die Methoden in der DLL aufrufen.

dieses Themas auf den MSDN-Foren dokumentiert, wie eine DLL machen mit P rufen / aufrufen.

Natürlich, wenn Sie den Zugriff auf eine ganze Klasse benötigen (und eine Instanz des Objekts machen), dies wird nicht hilfreich sein.

Es ist gut, dass der Code kompiliert und läuft für Sie. Das heißt es ist völlig unfair Sie davon ausgehen, können in einer Stunde tun.

Haben Sie überprüft, um zu sehen, was tatsächlich von Visual Studio gebaut. Es könnte eine Chance sein, dass es bereits baut ein COM-Objekt.

Untersuchen Sie, wie der Code aufgerufen wird. Ich nehme an, Sie eine .exe haben, dass Sie den Code testen ausführen können. Schritt für Schritt durch den in dem VC ++ Debugger (es zu debuggen C # -Code ähnlich genug ist) und versuchen, jede API zu identifizieren, ruft das Match mit Ihrem docs / Erwartungen. Dieses Wissen wird hilfreich sein, wenn Sie versuchen, die P zu gehen / Invoke Route.

Etwas anderes zu berücksichtigen ist, SWIG . Dies wird typischerweise durch Python-Entwickler verwendet, um C / C ++ Code zu wickeln und bietet eine gewisse Unterstützung für C #.

Das verwaltete C ++ Route ist wahrscheinlich ratsam für erfahrene C ++ Entwickler, weil man viel über Speicherzuweisung verstehen müssen, für alle, aber die einfachste Code.

I (na ja, wirklich meine Führung und I) werden zunächst versuchen, mit p / Invoke (über das DllImport Merkmal System.Runtime.InteropServices) gegen die DLL SDK das Unternehmen zur Verfügung gestellt. Ich lasse Sie wissen, wie es geht.

Ich denke, was Sie wirklich wollen / müssen ist C ++ / CLI, dass wie ich sie nur bauen kann direkt in eine verwaltete Assembly. Die Idee ist, dass Sie einen ziemlich einfach Wrapper schreiben, die zwischen C # und C ++ wie Art eines Kreuz sieht und dann tut es den Rest.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top