C# Dll verwenden

  • Hallo Leute^^,
    ich versuche grade verzweifelt eine C# Dll zum laufen zu bringen.

    So wird in der Dll die Funktion definiert:

    Code
    public void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle)


    Wenn ich versuche die DLL so aufzurufen:

    [autoit]

    DllCall($dll,"none","int",50,"int",50,"INT_PTR",$form1)

    [/autoit]

    Kommt @error=3 Was heißt das er die Funktion nicht findet

    Wenn ich sie hiermit "konvertiere": https://autoit.de/index.php?page…0596#post110596
    Kommt @error=1 was heißt das diese Dll nicht verwendet werden kann.
    Da man damit nur Funktionen konvertieren kann die static deklariert sind hab ich als rückgabewert einfach int genommen und return 1; unter die Funktion geschrieben.
    Normalerweise gibt die Funktion nichts zurückt.

    Die 3. Möglichkeit wäre die DLL als COM Object hinzuzufügen , da weiß ich allerdings nicht wie.

    Hoffe auf Hilfe^^

    MfG Sumsum

    • Offizieller Beitrag

    Du solltest in dem DllCall den Namen der Funktion angeben


    Und außerdem solltest du dich vorher vergewissern, dass in der Dll deine Funktion auch mit dem von dir vergebenen Namen abgespeichert wurde (was häufig nicht der Fall ist, oft noch "@8" oder ähnlich hinter dem Funktionsnamen). Überprüfen kannst du das mit dem Dependency Walker.

    Edit:
    Damit auch der angegebene Funktionsname ohne zusätzliche Zeichen in die Dll aufgenommen wird, sollte das etwa so aussehen:

    Spoiler anzeigen
  • Dieser Code funktioniert sehr gut nur war der DllCall in AutoIt falsch, da ist es egal ob nun c++ oder c#
    Exportiert hiermit Link

    Code
    public static void SetProgressValue(int currentValue, int maximumValue, IntPtr windowHandle)
    {
        string msg = "currentValue: " + currentValue;
        msg += "\nmaximumValue: " + maximumValue;
        msg += "\nwindowHandle: " + windowHandle;
    
    
        MessageBox.Show(msg);
    }
    [autoit]

    $dll = DllOpen("classlibrary1x86.dll")
    $bla = DllCall($dll, "none","SetProgressValue", "int", 50, "int", 50, "INT_PTR", 100)
    MsgBox(0, "", @error)
    DllClose($dll)

    [/autoit]