rust - 无法导出 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 方法
我做错了什么?
解决方案
所以我想出了如何解决这个问题。
我在 MinGW 中使用了 gnu 工具链,这是一个错误。我刚刚用 microsoft sdk 下载了 MSVC 工具链,它解决了我的问题。
推荐阅读
- api - 获取 api 中的查询参数 - 未处理的异常:类型 '_InternalLinkedHashMap
' 不是类型 'Map 的子类型 ' - python - 使用 Python 脚本将数据检索到 Telegram 机器人
- python - 如何用python解析modbusTCP/RTU数据(标准化计算:Raw_data、进程变量、big-endian、Bitwise解析)
- reactjs - 提升状态并访问动态创建的输入文本字段的值
- websocket - 如何使用nestjs向单个客户端广播消息?
- c# - MS Office Interop - 带密码的 DOCX 到 PDF
- python - 在类范围内理解python中的__privateVariable
- java - Java:带有 return 和 throw 新语句的 try-catch-resources
- java - 新创建的 PaymentTransaction ID 为空
- ios - 继承 NotificationCenter 的优点和缺点