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
Sind Ihre Windows-Plattform 32 oder 64 Bit. Haben Sie das nicht verwaltete DLL für 32 oder 64 Bit bauen? –
Es ist [email protected] –