- Offizieller Beitrag
Interessant ist natürlich, wie man Funktionen für AutoIt verfügbar machen kann.
Dll-Erstellung ist recht simpel. Zu beachten ist:
• Nim erstellt standardmäßig 64Bit Dll (also in AutoIt: #AutoIt3Wrapper_UseX64=y erforderlich)
• Aufpassen bei den Datentypen. z.B. float in Nim ist float64 - muss in AutoIt dann mit double deklariert werden (oder in Nim als float32 - dann ist es in AutoIt float)
Code
# Compile: nim c --app:lib math.nim
proc addiere(p1, p2: int): int {.stdcall,exportc,dynlib.} =
p1 + p2
proc subtrahiere(p1, p2: int): int {.stdcall,exportc,dynlib.} =
p1 - p2
proc multipliziere(p1, p2: int): int {.stdcall,exportc,dynlib.} =
p1 * p2
proc dividiere(p1, p2: float): float {.stdcall,exportc,dynlib.} =
p1 / p2
Alles anzeigen
AutoIt
#AutoIt3Wrapper_UseX64=y
Local $hDll = DllOpen("C:\CODE\nim\_myExamples_\math.dll")
Local $aRes, $a = 9, $b = 18
$aRes = DllCall($hDll, 'int', 'addiere', 'int', $a, 'int', $b)
If Not @error Then ConsoleWrite($aRes[0] & @CRLF)
$aRes = DllCall($hDll, 'int', 'subtrahiere', 'int', $a, 'int', $b)
If Not @error Then ConsoleWrite($aRes[0] & @CRLF)
$aRes = DllCall($hDll, 'int', 'multipliziere', 'int', $a, 'int', $b)
If Not @error Then ConsoleWrite($aRes[0] & @CRLF)
$aRes = DllCall($hDll, 'double', 'dividiere', 'double', $a, 'double', $b)
If Not @error Then ConsoleWrite($aRes[0] & @CRLF)
DllClose($hDll)
Alles anzeigen