2015-09-29 9 views
5

Voglio creare una dll dal codice nim. Ma non sono riuscito a registrare alcune altre esportazioni di "NimMainInner". Anche se provo questo semplice esempio non il suo lavoro:Come creare correttamente una dll di windows nim/nimrod

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

ho compilato con nim c --app:lib libh4x.nim e nim c -d:release --app:lib --no_main libh4x.nim

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

per ispezionare il dll io uso dllexp.exe. Ho anche provato a caricare la DLL con i tipi di python, ma nessuna delle mie esportazioni è mostrata o richiamabile. Posso vedere il nome proc nella dll risultante con un hexeditor, però.

Cosa mi sono perso qui?

risposta

4

Manca il pragma dynlib. Quindi ho cambiato la definizione in:

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

ora funziona.

Nota: se si utilizza questo con pitoni ctypes e con parametri di funzionamento assicurarsi di utilizzare ctypes.cdll.LoadLibrary invece di ctypes.windll.LoadLibrary: Python ctypes argument errors

e per dichiarare la funzione in questo modo:

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