2016-04-30 4 views
2

Ich weiß, dass meine Frage möglicherweise doppelt erscheint. Aber glauben Sie mir, ich habe mehrere Antworten auf dieser Seite versucht und hatte bei weitem kein Glück. Ich wäre also sehr dankbar, wenn mir jemand sagen könnte, was mit dem, was ich tue, nicht stimmt. Eine klare und Schritt-für-Schritt-Anleitung würde von mir sehr geschätzt werden und hoffentlich andere, die Anfänger im Umgang mit DLLs und WPF sind (Ich habe bereits versucht this und this und this).Laden von nicht verwalteten DLLs in WPF-Anwendungen

Hier ist ein C++ Code in seiner einfachsten Form:

#include <stdio.h> 
#pragma unmanaged 

extern "C" 
{ 
    __declspec(dllexport) int add(int a,int b) 
    { 
     return a+b; 
    } 
    __declspec(dllexport) int subtract(int a,int b) 
    { 
     return a-b; 
    } 
} 

OK, so dass ich dies in einem DLL-Projekt in Visual C++ 2013 und es bauen. Was ist erfolgreich und gibt mir eine Datei mit dem Namen OurDLL.dll.

Nun erstelle ich eine neue WPF-Anwendung C#, schreiben die einfachsten Methoden möglich und fügen Sie die folgenden Zeilen in die Datei MainWindow.xaml.cs:

/// some using statements 

using System.Runtime.InteropServices; 
namespace test1 
{ 
    public partial class MainWindow : Window 
    { 
     [DllImport("OurDll.dll", CallingConvention = CallingConvention.Cdecl)] 
     public static extern int add(int a, int b); 

     /// the rest of the code 

Der Code kompiliert und baut erfolgreich. Ich habe die DLL-Datei in den Ordner gelegt. Aber immer, wenn ich versuche, die add Funktion zu nutzen, eine Ausnahme Fenster scheint dies zu sagen:

Eine nicht behandelte Ausnahme des Typs ‚System.BadImageFormatException‘ aufgetreten in test1.exe

Zusätzliche Informationen: Es wurde versucht, zu Laden Sie ein Programm mit einem falschen Format. (Ausnahme von HRESULT: 0x8007000B)

Jetzt bin ich wirklich frustriert und haben keine Ahnung, was :(tun

+0

Sind Ihre Windows-Plattform 32 oder 64 Bit. Haben Sie das nicht verwaltete DLL für 32 oder 64 Bit bauen? –

+0

Es ist [email protected] –

Antwort

2

Wahrscheinlich ist das Problem ist die Diskrepanz der Build-Einstellungen für Ihr C++ und C# Anwendungen

.

Versuchen this, this und this Antworten zu überprüfen. Hoffnung, dass helfen.

+1

Danke. Offenbar, wenn ich den vollständigen Pfad zu DLL-Datei, d. H. 'DllImport (@" C: \ Pfad zu Datei \ OurDll.dll "..." Das Problem wurde magisch behoben! –