【发布时间】:2016-02-29 14:07:24
【问题描述】:
我正在尝试为 ArmA 3 和 game docs 编写一个 DLL 扩展:
dll 应包含表单的入口点 _RVExtension@12,带有以下 C 签名:
void __stdcall RVExtension(char *output, int outputSize, const char *function);
部分C++代码示例为:
// ...
extern "C" {
__declspec(dllexport) void __stdcall RVExtension(
char *output,
int outputSize,
const char *function
);
};
void __stdcall RVExtension(
char *output,
int outputSize,
const char *function
) {
outputSize -= 1;
strncpy(output,function,outputSize);
}
文档还有很多其他语言的示例,例如:C#, D and even Pascal,但这些对我没有多大帮助,因为我不太了解他们的 FFI =(。
我被以下 Rust 代码卡住了:
#[no_mangle]
pub extern "stdcall" fn RVExtension(
game_output: *mut c_char,
output_size: c_int,
game_input: *const c_char
) {
// ...
}
但 ArmA 拒绝调用它。
【问题讨论】: