Globale Deklaration gegen Pointer Wirrwarr



  • Hallo Zusammen.

    Zunächst einmal das Problem zum Überblick:
    In meinem Fall entsteht ein Durcheinander mit den Pointern auf ein Array. Das würde ich gerne über eine globale Deklaration das Arrays 'dblArray' beheben, aber wie?

    Nun die genaue Beschreibung:

    Ich habe mir eine Funktion in eine DLL geschrieben, die auch ganz wunderbar funktioniert. Die Funktion sieht so aus:

    double _stdcall dblMeineDLL (long lngVal1, double dblArray[])
    {
        //der entsprechnde Code
        double Result = dblMaxVomArray(dblArray);
        return 0;
    }
    

    Aus VBA rufe ich die DLL auf und übergebe einen Long-Wert als Wert an die Variable lngVal1 und eine Referenz auf das erste Element einer Matrix die in VBA erstellt wurde.
    Alles in der Funktion 'dblMeineDLL' funktioniert, aber nun möchte ich in der Funktion 'dblMeineDLL' eine weitere kleine C++ Funktion, hier 'dblMaxVomArray' aufrufen, die mit dem Array dblArray arbeiten soll. Die Funktion 'dblMaxVomArray':

    double dblMaxVomArray (double dblSuchArray[])
    {
        int i;
        double dblMax = dblSuchArray[0];
    
        for (i = 1; i < 100; i++) {
            if(dblSuchArray[i] > dblMax)
                dblMax = dblSuchArray[i];
        }
        return dblMax;
    }
    

    Wie muss ich die Variable 'dblArray' global deklarieren, dass ich das Array in allen Funktionen der DLL nutzen kann?

    Vielen Dank und Grüße,
    Dirk



  • Moment ...
    sag bloss, du gehst tatsächlich in einen Harley-Davidson-Club und schwärmst die ganze Zeit von deiner Suzuki?



  • Hallo RenéG,

    Original erstellt von RenéG:
    Moment ...
    sag bloss, du gehst tatsächlich in einen Harley-Davidson-Club und schwärmst die ganze Zeit von deiner Suzuki?

    ich weiß es ist blöd wenn man Witze erklärt haben möchte, aber den verstehe ich nicht.
    Was hat das mit dem obigen Problem zu tun?

    Grüße,
    Dirk



  • Es war kein Witz.

    Einer der Vorzüge von C++ ist, keine globalen Variablen zu verwenden. Und du
    postest in einem C++-Forum über den Vorzug globaler Variablen!



  • Hallo RenéG.

    Ach so, ich verstehe.

    Kannst du mir denn sagen, wie ich mein Problem ohne globale Variablen in den Griff bekomme? Wenn ich eine gute Lösung ohne globale Variablen hätte würde ich mich ebenso freuen.

    Grüße,
    Dirk



  • Dein erstes Problem ist doch, dass Du eine DLL benutzt. DLLs sind deshalb DLLs, weil sie vielseitig einsetzbar sein sollen.
    Die Grenzen in deiner Schleife, welche auf das double-Array zugreift, sind allerdings statisch, so dass Deine DLL nur funktioniert, wenn das Array nicht mehr als 100 Einträge enthält.
    Weiterhin ist es wirklich nicht schlimm, jeder Funktion einen Parameter mitzugeben, der auf das Array zeigt. Es ist zum einen besser zu debuggen und zum zweiten sicherer.



  • Das ich die Schleife auf 100 gesetzt habe war nur um nicht überflüssig viele Variablen zu haben. Klar ziehe ich noch eine Long-Variable durch in der die Größe des Arrays steht.

    Aber mein Problem ist ein anderes. Ich habe in der DLL noch die folgende (als Beispiel extra kleine) Funktion definiert:

    void TestTest(double dblUebergabeArray[])
    {
        dblUebergabeArray[0] = 100;
    }
    

    Diese rufe ich aus der im 1. Post definierten Funktion 'dblMeineDLL' so auf:

    double _stdcall dblMeineDLL (long lngVal1, double dblArray[])
    {
        TestTest(dblArray);    //cannot convert parameter 1 from 'double []' to 'double'
        return 0;
    }
    

    Wie werde ich diesen Fehler los? Ich denke, dass irgendwas mit meiner übergabe nicht stimmt, aber was?

    Grüße,
    Dirk

    Edit: Die Funktion TestTest ist in Kopf der .cpp so definiert: 'void TestTest (double);'

    [ Dieser Beitrag wurde am 09.07.2003 um 17:29 Uhr von Dirk99 editiert. ]



  • Hallo!

    Nach einigem rumprobieren und stöbern habe ich die Lösung anscheinend selbst gefunden:
    Im Kopf habe ich die Funktion nun so definiert:

    void TestTest (double *);
    

    Der Aufruf in 'dblMeineDLL' bleibt gleich. Die Funktion TetsTest lautet nun so:

    void TestTest(double *dblArray)
    {
        for (int i = 0; i < 300; i++) {
            dblArray[i] = (double) 100;
        }
    }
    

    Damit werden die ersten 300 Einträge des Arrays welches an 'TestTest' übergeben wird auf 100 gesetzt.

    Vielen Dank und Grüße,
    Dirk


Anmelden zum Antworten