我正在尝试为ArmA 3编写DLL扩展,游戏文档说:
dll应包含_RVExtension @ 12格式的入口点,并带有以下C签名:
void __stdcall RVExtension(char *output, int outputSize, const char *function);
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
文档在其他语言中也有很多例子:C#,D甚至是Pascal,但是那些对我没什么帮助,因为我对他们的FFI =没有很好的理解.
我坚持使用以下Rust代码:
#[no_mangle]
pub extern "stdcall" fn RVExtension(
game_output: *mut c_char,
output_size: c_int,
game_input: *const c_char
) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
但ArmA拒绝称呼它.