DLLCall lässt keine Parameterübergabe zu

  • Guten Abend/Morgen,

    ich bins nochmal. War bisschen mit einer selbstgemachten DLL am experimentieren.
    Sobald ich einen Parameter bei DLLCall übergebe bekomme ich sofort einen Absturz meines Programmes.
    Syntax von DLLCall:

    [autoit]

    $call = DllCall ("dll.dll", "double", "test", "double", "1")

    [/autoit]

    die entsprechende Funktion in der DLL sieht so aus:

    Code
    double test(double test){
    }


    Ich kanns mir echt nicht erklären. Für ein bisschen Hilfe wäre ich sehr dankbar.
    Grüße ErrorKid

    Einmal editiert, zuletzt von ErrorKid (10. Februar 2013 um 11:08)

  • Vielleicht liegts daran, dass deine Funktion nichts zurückgibt... sollte doch eigentlich ein double wert zurückkommen ?

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Der Datentype "double" ist doch nur Floats, nicht für Strings...

    In welcher Sprache ist die DLL eig. geschrieben?

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Ist das der vollständige Quellcode der Dll?
    2 Möglichkeiten fallen mir spontan ein:

    • Eine 32 Bit Dll wird von einem 64 Bit AutoIt aus aufgerufen oder anders herum
    • Die Dll ist für die cdecl Aufrufkonvention kompiliert und wird so wie du es hingeschrieben hast aber als stdcall angesprochen. Falls dies der Fall ist beim Rückgabetyp in der DLLCall-Funktion "cdecl:double" statt "double" eintragen.
  • Vielen Dank an alle! Es lag tatsächlich daran dass ich die Dll für die cdecl Aufrufkonvention kompiliert habe. Eine einfache Änderung von "double" zu "cdecl:double" hat gereicht und es funktioniert. DANKE!