- Referenz auf eine unmanaged C++ DLL von Verwaltetem C++
Diese Frage ergibt sich aus meiner vorherigen Frage: Erstellen der DLL von unmanaged C++, aber Sie würde nicht haben, es zu Lesen, um zu verstehen, diese neue Frage.
Ich habe jetzt eine DLL mit nicht verwaltetem C++ - code, bestehend aus ein paar Funktionen, von denen ich nur exportieren, eine für den Außenbereich. Als Nächstes muss ich mich mit dieser DLL, die in einer Verwalteten C++ - Projekt (gebaut mit Common Language Runtime-Unterstützung). So weit, ich habe einen Verweis auf die bestehenden unmanaged Projekt-header-Datei, indem Sie die Additional Include Directories
im Visual Studio 2010.
Wenn ich jetzt versuchen, fügen Sie einen Verweis auf die DLL Datei: MyManagedProject > Properties > Common Properties > Add New Reference > Browse > MyUnmanagedDLL.dll
bekomme ich einen Fehler Could not add a reference to file MyUnmanagedDLL.dll because it is neither a .NET assembly nor a registered ActiveX control.
Jedoch, wenn ich die zuvor genannten DLL und ich kopiere es in den gleichen Ordner wie mein Managed C++'s executable funktioniert alles einwandfrei.
Ich bin nicht sicher, ob dies der richtige Weg, es zu tun, wie es zu sein scheint ein hackish-Lösung. Auch, es bedeutet, dass ich kopieren Sie die DLL über jedes mal, wenn ich eine änderung an dem Quellcode.
Zusammenfassend mein problem:
- Habe ich eine DLL, die aus nicht verwaltetem C++ - code, nennen wir es
MyUnmanagedDLL.dll
. Ich habe auch eine header-Datei für das DLL. - Ich habe eine Verwaltete C++ - Projekt (CLR), nennen wir es
MyManagedProject.vxproj
- Wie kann ich
MyUnmanagedDLL.dll
imMyManagedProject.vxproj
? Gibt es ein richtige Art und Weise zu referenzieren, oder soll ich es einfach kopieren in das gleiche Verzeichnis wieMyManagedProject.exe
? (Dies funktioniert, aber ich bin mir nicht sicher, ob seine gut üben...)
Zusätzliche Informationen: Windows 7, Visual Studio 2010 Ultimate, CMake 2.8.10.2
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht fügen Sie die nicht verwaltete DLL als Referenz, um Ihre verwalteten C++ - Projekt. Sie können nur tun, dass mit managed-DLLs. Was Sie stattdessen tun, ist die Verbindung zu der nicht verwalteten DLL in der gleichen Weise, wie Sie einen link zu einer nicht verwalteten DLL in unmanaged C++ Projekt:
Anscheinend die einzige Lösung ist, an die nicht verwaltete dll-Pfad in der Methode verziert mit DllImport-Attribut.
Was Sie tun können, um die Dinge in eine nette Möglichkeit ist das erstellen einer lib-Ordner zu legen, der nicht verwalteten dll ' s und mark Ihre Eigenschaft "Copy to output directory" als "Immer Kopieren" (Rechte Maustaste über die nicht verwaltete dll->Eigenschaften->die Eigenschaft in Ausgabeverzeichnis Kopieren: Immer Kopieren).
In Ihrer Methode DllImport-Attribut zu, müssen Sie die Parameter als "lib/unmanaged.dll". In C# müssten Sie etwas wie dieses.
Dieser Ansatz hat keinen Unterschied von den vorherigen Antworten, aber es wird Ihnen helfen, halten Sie code ein wenig mehr ordentlich.