Zeiger auf Speicherbereich vom Typ DWord


D12

Mitglied
Guten Morgen Tutorials,

habe in einer API (VC++) eine Funktion wie folgt:
PCIDIO_API BOOL pcidioInitCards(DWORD *a_dwNumOfCards);

Nun muss ich die mit dllimport über C# aufrufen. Leider weis ich nicht mehr wie ich Zeiger übergebe, bzw. einen Zeiger in C# deklariere und initialisiere.

Und wo wir grad dabei sind, weis einer von Euch wie man den Datentyp DWord initialisiert?

Salü
D12
 
Zuletzt bearbeitet:

D12

Mitglied
Zeiger übergeben, habe ich lösen können, nun muss ich den noch initialaisieren....

Beispiel:
unsafe
{
uint* a_dwNumOfCards;
*a_dwNumOfCards = 0; //*** hier meldet der Compiler einen Fehler...
// Fehler: error CS0165: Verwendung von
// möglicherweise nicht zugewiesenen
// lokalen Variablen 'a_dwNumOfCards'

pcidioInitCards(a_dwNumOfCards);
}

*grummel* das ist zum Mäusemelken, wenn man wegen so was nicht weiter kommt. Das behandelt keines meiner Bücher,. lol, vielleicht ist das ein Hinweis auf die mengelnde Qualität meiner Bücher...

Salü,
D12
 

kahuna

Erfahrenes Mitglied
Andererseits frage ich mich, wieso du unsafe code benötigst, um diese Funktion aufzurufen... Gib doch mal deine Funktionsdeklaration von pcidioInitCards durch.

Ich denke, sie sollte in der richtung aussehen:
[DllImport("deineVCC.dll", CharSet = CharSet.Auto,
SetLastError = true)]
public static extern void pcidioInitCards(UIntPtr dwNumOfCards); //evtl. hier auch IntPtr dwNumOfCards

Normalerweise erledigt der Marshaller die Datentypskonvertierung, solange die Datentypen kompatibel sind.

Gruss Alexander
 

D12

Mitglied
Ich muss mit "call by reference arebeiten", die Funktion selber ist in einer dll, deren Quellcode ich nicht kenne (Treiber).

kahuna hat gesagt.:
Andererseits frage ich mich, wieso du unsafe code benötigst, um diese Funktion aufzurufen... Gib doch mal deine Funktionsdeklaration von pcidioInitCards durch.

Ich denke, sie sollte in der richtung aussehen:
[DllImport("deineVCC.dll", CharSet = CharSet.Auto,
SetLastError = true)]
public static extern void pcidioInitCards(UIntPtr dwNumOfCards); //evtl. hier auch IntPtr dwNumOfCards

Normalerweise erledigt der Marshaller die Datentypskonvertierung, solange die Datentypen kompatibel sind.

Gruss Alexander