2010-05-22 11 views
8

Ich versuche, die lame_enc.dll-Datei von LAME in einem C# -Projekt zu verwenden, aber das Hinzufügen der Sache scheint unmöglich.Hinzufügen von C++ - DLLs zu einem C# -Projekt

Ich bekomme immer einen Fehler, der besagt, dass eine Referenz nicht hinzugefügt werden konnte und um zu überprüfen, ob der Zugriff möglich ist, eine gültige Assembly oder COM-Komponente.

Ich habe keine C++ Erfahrung, obwohl ich die Funktionalität gerne nutzen würde. Im Moment verwende ich Process aus dem .NET-Framework, um lame.exe aufzurufen und Dinge zu tun, aber ich würde gerne wissen, ob es einen anderen Weg gibt.

+0

zu diesen anderen Kommentare hinzufügen Wenn Sie am Ende eine Art Wrapper erstellen müssen, kann es nützlich sein, Whole-Hog zu verwenden und einen COM-aufrufbaren Wrapper zu verwenden. Auf diese Weise könnten Sie es zB auch mit jscript aufrufen :) Und wenn Sie nach LAME COM Wrapper suchen, erhalten Sie eine Antwort wie diese: http://www.mail-archive.com/[email protected] tuhs.org/msg02219.html –

Antwort

6

Sie haben P/Invoke zu verwenden, nicht verwalteten APIs von verwalteten Code aufzurufen.

8

Sie können verwaltete Baugruppen nur als Referenz zu einem verwalteten Projekt hinzufügen. Was ich normalerweise in dieser Situation mache, ist, sie als Ressource anstatt mit den lokalen Einstellungen hinzuzufügen. Auf diese Weise ist die DLL an Ihr Projekt gebunden und wird mit diesem bereitgestellt. Ich benutze dann DllImport, um manuell die APIs zu erhalten, die ich von dieser DLL benötige.

3

Sie müssen PInvoke verwenden, um Funktionen in Ihrer nativen lame dll aufzurufen. Sie können jedoch nur Funktionen aufrufen, die als "C" -Stil exportiert wurden.

Sie können ein Tool wie „PInvoke Interop Assistant“ verwenden, die Ihnen helfen, wenn die PInvoke Anruf Signaturen Ausarbeiten Anrufe von C# zu Ihrer Mutter dll zu machen:

http://clrinterop.codeplex.com/releases/view/14120