2015-09-29 3 views
5

Ich möchte eine DLL aus Nim-Code erstellen. Aber ich konnte einige andere Exporte als "NimMainInner" nicht registrieren. Auch wenn ich dieses einfache Beispiel versuchen, seine nicht funktioniert:So erstellen Sie eine Nim/Nimrod Windows DLL

proc Hellow(): cint {.exportc.} = 
    echo("hello") 
    return 1 

ich es kompiliert haben mit nim c --app:lib libh4x.nim und nim c -d:release --app:lib --no_main libh4x.nim

verwenden i Nim Compiler Version 0.11.2 (2015-05-04) [Windows: i386]

die DLL i dllexp.exe verwenden zu inspizieren. Ich habe auch versucht, die DLL mit Python Ctypes zu laden, aber keiner meiner Exporte werden angezeigt oder sind aufrufbar. Ich kann den Prozessnamen in der resultierenden DLL jedoch mit einem Hexeditor sehen.

Was habe ich hier verpasst?

Antwort

4

Das Pragma dynlib fehlte. Also habe ich die Definition geändert in:

proc Hellow(): cint {.exportc,dynlib.} = 
    echo("hello") 
    result = 1 

jetzt funktioniert es.

Hinweis: Wenn Sie diese verwenden, um mit Pythons ctypes und mit Funktionsparameter stellen Sie sicher, ctypes.cdll.LoadLibrary statt ctypes.windll.LoadLibrary zu verwenden: Python ctypes argument errors

und die Funktion wie folgt zu erklären:

proc myinit(procid : int) {.cdecl,exportc,dynlib.} = 
    discard 
Verwandte Themen