5

nim コードから dll を作成したいと考えています。しかし、「NimMainInner」以外のエクスポートを登録できませんでした。この簡単な例を試しても機能しません:

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

私はそれをコンパイルしましnim c --app:lib libh4x.nimnim c -d:release --app:lib --no_main libh4x.nim

私が使うNim Compiler Version 0.11.2 (2015-05-04) [Windows: i386]

私が使用するdllを検査しますdllexp.exe。また、Python ctypes を使用して dll をロードしようとしましたが、エクスポートが表示されないか、呼び出し可能ではありません。ただし、hexeditor を使用すると、結果の dll で proc 名を確認できます。

私はここで何を逃したのですか?

4

1 に答える 1

5

dynlibプラグマがありませんでした。そこで、定義を次のように変更しました。

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

今では動作します。

注: これを pythons ctypes および関数パラメーターで使用する場合は、ctypes.cdll.LoadLibrary代わりにctypes.windll.LoadLibrary: Python ctypes argument errorsを使用してください。

そして、次のように関数を宣言します。

proc myinit(procid : int) {.cdecl,exportc,dynlib.} =
  discard
于 2015-09-29T09:07:47.310 に答える