tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
405
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    D12 D12 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Eschweiler
    Beiträge
    64
    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
    Geändert von D12 (20.07.05 um 08:09 Uhr)
     

  2. #2
    D12 D12 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Eschweiler
    Beiträge
    64
    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
     

  3. #3
    kahuna kahuna ist offline Mitglied Gold
    Registriert seit
    Jul 2003
    Beiträge
    154
    Machs so:
    uint* a_dwNumOfCards = (uint*)0;

    Gruss Alexander
     

  4. #4
    kahuna kahuna ist offline Mitglied Gold
    Registriert seit
    Jul 2003
    Beiträge
    154
    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
     

  5. #5
    D12 D12 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Eschweiler
    Beiträge
    64
    Ich muss mit "call by reference arebeiten", die Funktion selber ist in einer dll, deren Quellcode ich nicht kenne (Treiber).

    Zitat Zitat von kahuna
    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
     

  6. #6
    D12 D12 ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Eschweiler
    Beiträge
    64
    Zitat Zitat von kahuna
    Machs so:
    uint* a_dwNumOfCards = (uint*)0;

    Gruss Alexander
    Danke, das funktioniert...
     

Ähnliche Themen

  1. Speicherbereich eines Prozesses
    Von Ichbinalex im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 08.06.09, 15:00
  2. Antworten: 0
    Letzter Beitrag: 27.12.07, 16:08
  3. Image aus Speicherbereich erstellen ?
    Von Hroudtwolf im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 03.04.07, 14:17
  4. Zeiger auf Zeiger nicht verstanden
    Von Razorhawk im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 17.10.05, 12:24
  5. Speicherbereich von Programmen auslesen
    Von JoKne im Forum Coders Talk
    Antworten: 10
    Letzter Beitrag: 07.07.04, 11:22