Laden...

C-Programm von C# ansprechen und verwalten

Erstellt von boco25 vor 19 Jahren Letzter Beitrag vor 19 Jahren 1.947 Views
B
boco25 Themenstarter:in
483 Beiträge seit 2005
vor 19 Jahren
C-Programm von C# ansprechen und verwalten

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

P
939 Beiträge seit 2003
vor 19 Jahren

Hi boco25,

was du machen möchtest, nennt sich "Platform Invoke" - kurz PInvoke. In der MSDN-Doku gibt es was dazu:

Gruss
Pulpapex

B
boco25 Themenstarter:in
483 Beiträge seit 2005
vor 19 Jahren

Hi Pulpapex,
vielen dank, versuche MSDN-Doku zu lesen und zu verstehen,
Gruss,
Boris

B
boco25 Themenstarter:in
483 Beiträge seit 2005
vor 19 Jahren

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

49.485 Beiträge seit 2005
vor 19 Jahren

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

B
boco25 Themenstarter:in
483 Beiträge seit 2005
vor 19 Jahren

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

49.485 Beiträge seit 2005
vor 19 Jahren

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