Hallo,
ich soll aus meinem c#-Programm ein C-Programm ansprechen. Ich habe die include Datei, dll und lib(Quellecode steht mir nicht zur Verfügung) und ich kenne alle Funktionen, die ich aus C-Programm brauche. Leider habe ich sowas noch nie gemacht. Wie ist die allgemeine Vorgehungsweise? Gibt es was im Internet oder ein Buch darüber.
Vielen Dank voraus,
Boris
Hi boco25,
was du machen möchtest, nennt sich "Platform Invoke" - kurz PInvoke. In der MSDN-Doku gibt es was dazu:
Gruss
Pulpapex
Hi Pulpapex,
vielen dank, versuche MSDN-Doku zu lesen und zu verstehen,
Gruss,
Boris
Hallo,
ich habe es gelesen, teils sogar verstanden. 😁
Meine Frage ist wie geht es: wenn ích eine Funktion aus native c-dll aufrufe die als Parameter eine Struktur erwartet, die aus Zeigern und enum besteht?
Anstatt Struktur mache ich eine Klasse, aber wie behandele ich richtig die Zeiger und enums.
Vielen Dank voraus,
Boris
Hallo boco25,
Strukturen musst du in dem aufrufenden Programm nachbilden.
Hier mal ein Beispiel:
[DllImport ("advapi32.dll", CharSet=CharSet.Ansi, ExactSpelling=true,
SetLastError=true, CallingConvention=CallingConvention.Winapi)]
private static extern bool OpenProcessToken (
IntPtr hProcess, // handle of process
int dwAccessMask, // desired access to process
ref IntPtr phToken // address of handle of open access token
);
Enums bzw. #defines aus dem Original kannst du auch als 'const int' definieren.
Wenn du Win32-Stukturen nachbilden willst, hilft oft die Google-Suche nach dem Namen des Struktur-Typs zusammen mit 'DllImport'.
herbivore
Hallo, vielen dank herbivore!
Leider verstehe ich bis jetzt eine Sache nicht verstanden.
**In include Datei sind enums und constanten defeniert, die ich als Parameter an die Fiunktionen übergehen muss
z.B. in datei.h
#define var1 1
Wie kriege ich den Zugriff auf var1 aus meinem c#-Programm? **
Vielen Dank voraus,
Boris
Hallo boco25,
Zugriff auf die Header-Datei bekommst du aus C# nicht. Du musst das alles nachbilden. In deine Beispiel also selbst eine Konstante definieren, z.B. mit
const int var1 = 1;
herbivore