dlls (ohne autoit) programmieren

  • moin ;)

    also ich hab mir mal versucht das mit den selbstgebastelten dlls anzusehen und hab anscheinend irgendwas falsch gemacht ;) ich weiss nur nicht was ^^

    die dll wollte ich in c# (mithilfe von ms visual-studie 2008) schreiben

    code:


    nicht sehr sinvoll ich weiss ^^ war ja auch nur zum probieren

    in den einstellungen habe ich zum kompillieren nur den ausgabetyp von "konsolenanwendung" auf "klassenbibliothek" geändert

    wenn ich das jetzt mit autoit aufrufe :

    [autoit]


    $test = DllCall("dlldatei.dll", "int", "blubb")
    msgbox(1, "test", $test)

    [/autoit]

    kommt anstatt der erwarteten "50" nur eine "0"

    hat jemand ne idee was ich falsch gemacht / vergessen hab? ^^

  • Code
    für was brauchst du "string[] args" aus einer main methode rauskopiert? du übergibst doch keine Werte in deiner Funktion
  • ehm ja ich hab da einfach nur via wizard des prog erstellt dann main in blubb umbenannt ;) - und das string args[] sollte eigendlich nix bewirken da es ja nirgendwo abgegriffen wird ^^

  • string[] args bewirkt sogar sehr viel, da die Funktion ein string Array erwartet. schmeiß das string[] args einfach raus.

    MFG. RAPTOR-ONE

    • Offizieller Beitrag

    Hallo,

    in der Regel muss man dem Linker noch ein paar Optionen mitgeben damit er z.B. die @-Zeichen aus den Funktionsnamen entfernt oder die Paramter in der richtigen Reihenfolge auf dem Stack abgelegt werden.

    Beim Linker von Code:Blocks (MinGW) sind das z.B. folgende Optionen:

    Code
    -Wl,--add-stdcall-alias
    -Wl,--kill-at
  • string args[] erwartet einen string das stimmt ;) - gibt sich aber im normalfall auch mit nem leeren string zufrieden ;) - hatte da zumindst noch nie ne fehlermeldung ^^

    habs nochmal getestet ohne das string args[] - geht genauso nicht ;) - bzw ebenso wenn ich im autoit-script paar pseudo-werte mit übergebe

    hab die vermutung dass ich irgendwo noch was umstellen müsste - nur keine ahnung ob bzw was und wo - bin schon paar tutorials durchgegangen nur klappts nicht - bekomme immer ne "0" zurück ;)

    *edit: tausendfach dank für deine signatur bernd670 ;) die seite is so genial ^^

  • Bernd: In C++ macht man es normalerweise so:


    Dann klappts auch mit dem Linker. :D
    PS: Von C# habe ich keine Ahnung, aber ist doch bestimmt ähnlich

    Edit: OK, Hier eine Erklärung von Nexus aus http://www.c-plusplus.de (Bin sicher, er hat nichts dagegen :) ) :

    Spoiler anzeigen

    Header: Schnittstelle für den Benutzer, soll inkludiert werden
    * Deklarationen von Funktionen und Variablen
    * Klassendefinitionen
    * Inline-Funktionen
    * Templates
    * Namensräume, Typedefs, Makros
    * evtl. Kommentare, die Funktionen beschreiben
    Implementationsdatei: Interne Implementierung und nur lokal benötigter Code
    * Definitionen der Funktionen und Elementfunktionen
    * Definitionen der statischen und globalen Variablen, falls vorhanden
    * Include-Direktiven und Deklarationen, die nur in der CPP-Datei benötigt werden

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    2 Mal editiert, zuletzt von Fast2 (7. Dezember 2008 um 14:07)

  • ok ;) von c++ hab ich wieder NULL ahnung ;)

    ergo ich weiss nicht was du mit header und impl.-datei meinst ;)
    werds morgen nochmal googeln ^^

  • Du kannst mit c# keine win32 DLLs erstellen. Dabei kommt immer nur .NET raus, und das geht mit AutoIt nicht...
    daher musst du DLLs mit c / c++ erstellen, wenn du sie in AutoIt nutzen willst.

  • hmm das is schade;)

    doch mal mit c++ rumbasteln ;)
    (bei meim ach-so-tollen visual studio funktioniert da der compiler net xD)

    oder geht des in pascal (delphi) auch irgendwie? ^^