无法导出stdcall方法

时间:2019-09-08 10:11:15

标签: rust dllexport

我正在编写一些使用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方法

我做错了什么?

1 个答案:

答案 0 :(得分:1)

所以我想出了解决此问题的方法。
我在MinGW上使用了gnu工具链,这是一个错误。我刚刚用Microsoft sdk下载了MSVC工具链,它解决了我的问题。