Int* als Parameter



  • Hallo zsusammen,

    sorry dass ich zur Zeit viele Fragen bzgl. C++/CLI habe, aber bin gerade in einem Projekt bei dem ich das brauche aber nicht richtig verstehe.

    Von einem C-Programm aus wird eine Funktion ausgerufen, die als Parameter "int *" hat!

    int *Anzahl;
    int *Durchlauf;
    ...
    
    ret = GetWerte(Anzahl, Durchlauf);
    
    if(Anzahl > 5)
    ...
    

    Diese Werte bekomme ich in meinem Managed Code als Parameter rein. Ich muss nun diese Werte befüllen, so dass sie nach dem Aufruf im C-Programm zur Verfügung stehen. Sozusagen als Parameter by Ref.

    Wie muss ich nun auf der managed Code seite damit umgehen?

    //Managed Code (/CLI)
    
    int GetWerteManaged(int* anzahl, int durchlauf)
    {
       *anzahl= m_ANZAHL;
       *durchlauf = m_DURCHLAUF;
    }
    

    Diese Variante bringt einen Fehler..

    Eine nicht behandelte Ausnahme des Typs "System.NullReferenceException" ist in xxxxx.dll aufgetreten.

    Könnt ihr mir helfen?



  • Zeige wo die Exception geworfen wird. Genau die Stelle... gaaanz exakt die Stelle.
    Simon



  • Hallo Simon,

    und zwar wird die Exception gleich bei der ersten Zuweisung

    *anzahl= m_ANZAHL;
    

    geworfen!

    Hier im Post hatte ich in der Argumentenliste das "" vergessen. In meinem Projekt habe ich es aber drin! ist ja nur ein Beispiel von mir.
    Kann ich denn einfach die int
    meiner Managed Funktion übergeben und diesen Pointer nutzen?

    Gruß



  • Dann ist vermutlich anzahl einfach gleich 0.

    Schau hier ein Bsp welches funktioniert:

    ref struct A
    {
        A(int v)
            : _v(v)
        { }
    
        void process(int* p)
        {
            *p = _v;
        }
    
    private:
        int _v;
    };
    
    int main(array<System::String ^> ^args)
    {
        A a(2);
    
        int i = 0;
        int* p = &i;
        a.process(p);
    
        return 0;
    }
    

Anmelden zum Antworten