Я использую привязки llvm-fs и один метод, который я хотел бы вызвать, это createJITCompilerForModule
, который является внешним по отношению к собственному методу LLVMCreateJITCompilerForModule
в API LLVM C. Автор llvm-fs заявил, что не может сделать «хорошую» версию вызова этой функции на F#:
createJITCompilerForModule in llvm-fs:Generated.fs
:
[<DllImport(
"LLVM-3.1.dll",
EntryPoint="LLVMCreateJITCompilerForModule",
CallingConvention=CallingConvention.Cdecl,
CharSet=CharSet.Ansi)>]
extern bool createJITCompilerForModuleNative(
void* (* LLVMExecutionEngineRef* *) OutJIT,
void* (* LLVMModuleRef *) M,
uint32 OptLevel,
void* OutError)
// I don't know how to generate an "F# friendly" version of LLVMCreateJITCompilerForModule
Знаете ли вы, как я могу вызвать эту функцию из F# или даже то, что делает нативная функция? Похоже, что у нее есть "выходной параметр" для OutJIT
(поскольку нативный код переназначает то, что указывает void*
к). Вот нативная функция:
LLVMCreateJITCompilerForModule in llvm-c:ExecutionEngineBindings.cpp
:
LLVMBool LLVMCreateJITCompilerForModule(LLVMExecutionEngineRef *OutJIT,
LLVMModuleRef M,
unsigned OptLevel,
char **OutError) {
std::string Error;
EngineBuilder builder(unwrap(M));
builder.setEngineKind(EngineKind::JIT)
.setErrorStr(&Error)
.setOptLevel((CodeGenOpt::Level)OptLevel);
if (ExecutionEngine *JIT = builder.create()) {
*OutJIT = wrap(JIT);
return 0;
}
*OutError = strdup(Error.c_str());
return 1;
}
void*
? Скорее всегоnativeint
. - person Daniel   schedule 31.08.2012