首页 > 解决方案 > 无法导出 stdcall 方法

问题描述

我正在编写一些使用 jni 的代码。我的目标平台是 Windows。所以我的 jni 函数必须使用 stdcall 调用约定,但 Rust 仅使用 cdecl 调用约定导出函数。
我使用 MinGW(可能很重要)

我写了2个函数:

#[no_mangle]
pub unsafe extern "C" fn exported_cmethod(env: &JNIEnv, obj: jobject, path: jstring) {
    // Some jni staff
}

#[no_mangle]
pub unsafe extern "stdcall" fn exported_stdmethod(env: &JNIEnv, obj: jobject, path: jstring) {
    // Some jni staff
}

而不是我用dumpbin来查看出口表

dumpbin /exports acc_check.dll | findstr exported
2094  82D 000014A0 exported_cmethod = __ZN4core3fmt5Write10write_char17h774b1da469bdbfa3E

所以你可以看到 Rust 导出了 C 方法但没有导出 stdcall 方法

我做错了什么?

标签: rustdllexport

解决方案


所以我想出了如何解决这个问题。
我在 MinGW 中使用了 gnu 工具链,这是一个错误。我刚刚用 microsoft sdk 下载了 MSVC 工具链,它解决了我的问题。


推荐阅读