数週間の努力の結果、JIT コンパイルに LLVM を使用する F# プログラムを作成することができました。ただし、Visual Studio 2010 でデバッガーをアタッチして (つまり、F5 キーを押して) プログラムを実行すると、次の警告が表示されます。
現在、Windows 7 ネットブックを使用している場合は PInvoke 呼び出しごとにこの警告が表示されますが、Windows Vista デスクトップを使用している場合は一部の呼び出しでのみ表示されます。
CDecl
この問題にぶつかった他の人々は、ANSI 文字列または呼び出し規約を要求する PInvoke 呼び出しに属性を追加することで解決したようです。呼び出し規約を変更すると、Windows Vista デスクトップでは警告が修正されますが、使用可能な呼び出し規約 (または ANSI フォーマット文字列) のいずれも、Windows 7 ネットブックでは警告を修正しないことがわかりました。これを修正する方法はありますか?
両方のマシンが完全に 32 ビット x86 であることに注意してください。
編集
人々はリプロを求めるコメントを投稿しています。この問題を再現する最も簡単な方法は、ここに記載されている手順に従って LLVM と llvm-fs をインストールし、指定されたサンプル プログラムのいずれかを実行することです。私のネットブックでの LLVM へのすべての呼び出しで、この問題が発生します。
または、次のコード (llvm-fs から派生) は、llvm-fs を必要とせずに問題を再現する必要があります。
open System.Runtime.InteropServices
[<DllImport("LLVM-3.0.dll",
EntryPoint="LLVMModuleCreateWithName",
CharSet=CharSet.Ansi,
CallingConvention=CallingConvention.Cdecl)>]
extern void *moduleCreateWithNameNative(string ModuleID)
let mdl = moduleCreateWithNameNative "foo"
元の C ヘッダー ファイルの対応する定義は次のとおりです。
typedef struct LLVMOpaqueModule *LLVMModuleRef;
...
LLVMModuleRef LLVMModuleCreateWithName(const char *ModuleID);