C++ DLL Array mit AutoIt nutzen

  • Hi,
    wie der Name schon sagt würde ich gerne eine ein paar Rechnungen in eine C++ DLL auslagern. :P
    Mit den Grundrechenarten bin ich soweit gut zurechtgekommen (+ - * /) :) .
    Nun wollte ich Vektoren (x und y) hinzufügen. Mein Problem dabei besteht in der Ausgabe ;( .
    Ich weiss leider nicht wie ich einen Punkt ausgeben kann.
    Die Konsolenausgabe funktioniert, aber später soll ja ein Returnbefehl die Ausgabe der DLL an
    das AutoItscript weiterleiten.
    Hier erstmal eine Konsolenversion:

    Spoiler anzeigen

    Hier mein Fakultätsscript - DLL (das nur 1 Ergebnis ausgeben kann):

    Spoiler anzeigen
    Code
    __declspec(dllexport) double Fak( double a)
    			{
    				double b = 1;
    				for (int i = 2; i <= a; i++)
    				{
    					b *= i;
    				}
    				return b;
    			}


    der Aufruf in AutoIt war:

    [autoit]

    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    $a = DllCall("Bernoulli.dll","double:cdecl","Fak","double","4")
    If (IsArray($a)) Then
    _ArrayDisplay($a)
    EndIf

    [/autoit]


    Hat auch tadellos funktioniert, aber wenn ich 2 Ergebnisse haben will, dann weiss ich nicht wie ich die
    mit C++ mit "Return" übergeben kann und wie ich dann (wenn ich es geschafft hätte) mit autoit weiterverwenden kann.

    Ich hoffe ihr könnt mir helfen! :S

    //Edit : Ich merke grade, heute falle ich mir schwer mich auszudrücken...
    Ich will mit einem(!) Dll Aufruf einen Punkt berechnen!
    Ich übergebe als Parameter den X und den Y Wert und möchte gerne
    als Ergebnis (nach dem Aufruf) in AutoIt den veränderten Punkt (wieder X UND Y Wert)
    bekommen.

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

    2 Mal editiert, zuletzt von XovoxKingdom (10. April 2010 um 15:24)

  • Verwende doch ByRef-Parameter. BeispieL:

    Code
    __declspec(dllexport) void multiply(int *inout, int *inout2, int faktor)
    {
    	*inout *= faktor;
    	*inout2 *= faktor;
    }
    [autoit]

    Func multiply($aVektor, $faktor)
    Local $aResult = DLLCall("test.dll", "none:cdecl", "multiply", "int*", $aVektor[0], "int*", $aVektor[1], "int", $faktor)
    Local $return[2] = [$aResult[1], $aResult[2]]
    Return $return
    EndFunc

    [/autoit]
  • Ist das in irgendeinerweise "schädlich" :huh: ?
    Wahrscheinlich nur wenn man globale Variablen mit dem jeweiligen Datentyp deklariert, oder?
    Wo ist die Definition denn am besten?
    (ich vermute mal direkt nach der Implementierung der Includes!?)

    PS: Danke für den Einwand. Dann hab ich wohl wieder etwas gelernt :thumbup:

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!