NETLink`
NETLink`

DefineDLLFunction

DefineDLLFunction["func","dll",rtype,atypes]

指定されたアンマネージドのDLL dll で,引数の型 atypes と戻り型 rtype を持つ指定された関数 func を呼び出すWolfram言語関数を返す.

DefineDLLFunction["declaration"]

C#構文の'extern'関数宣言を書けるようにする.パラメータのそれぞれに対する特定の"MarshalAs"属性等のDefineDLLFunctionへのオプションを使ってでは利用できない機能を必要とするような複雑な関数宣言を書かなければならない場合にこれを使うとよい.

詳細とオプション

  • DefineDLLFunctionを使うためには,まず.NET/Link をロードしなくてはならない.それにはNeeds["NETLink`"]を実行する必要がある.
  • 以下のオプションを与えることができる:
  • CallingConventionAutomaticDLL関数で予期される呼出しの慣例(可能な値には"StdCall","CDecl", "ThisCall",Automaticがある)
    MarshalStringsAs"ANSI"文字列の引数(char*, string,String)がDLL関数からどのようにマーシャルしたりされたりすべきか(可能な値には"ANSI","Unicode",Automaticがある)
    ReferencedAssembliesAutomatic宣言に参照されるアセンブリの名前のリスト
  • atypes 引数は,引数の型指定のリストであり,関数が引数を取らない場合には削除してもよい.
  • 引数の型と戻り型の指定は文字列,あるいは稀にNETType式である.
  • 文字列は,Cスタイルの構文("char*"等),C#構文("string"),Visual Basic .NET構文("ByVal As String")のいずれかで与えられるか,あるいは多くのWindows APIの型("HWND""DWORD""BOOL"等)を使って与えられることができる.
  • 優先権は型の名前のC解釈に与えられるので,charおよびlongは,C#ではなくCにおける意味(それぞれが1と4バイト)を持つ.
  • DLLが標準の場所(標準の場所とは,システム上のディレクトリPATH,あるいは$InstallationDirectoryAddOns\Applications\SomeApp\DLL等Wolframシステムアプリケーションディレクトリ内のDLLサブディレクトリを指す)にない場合には,完全なパス名を与える必要がある.