为了账号安全,请及时绑定邮箱和手机立即绑定

Java SWIG 包装器与直接函数调用

Java SWIG 包装器与直接函数调用

手掌心 2021-10-27 10:18:19
我有某种库,我正在为其编写包装器,然后我尝试在其上生成 SWIG 包装器,以便我可以直接从 Java 进行调用。我遇到了一个无法调试的问题,因为基本上只有 0 条信息(Java 端)。这是我正在处理的。我有一个这样的自定义类:class APIClass {private:public:    APIClass();    void mbstowcsTest();};它的实现看起来像这样typedef unsigned short      AName[32];void APIClass::mbstowcsTest() {  const char* source = "D:\\test3\\source\\test.txt";  AName tmp1;  mbstowcs((wchar_t*)tmp1, source, 32 - 1);}使用这样的代码,我为它生成 SWIG 文件并使用批处理脚本编译代码,如下所示:@echo offcall "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64swig -c++ -java -outdir java api.iset CompilerFlags=-nologo -Zipushd buildcl %CompilerFlags% ..\api.cpp ..\api_wrap.cxx /I"C:\Program Files (x86)\Java\openjdk8u102-win_jdk\include"^  /I"C:\Program Files (x86)\Java\openjdk8u102-win_jdk\include\win32" /LD /EHscpopdCOPY .\build\api.dll .\java\至于 api.i 接口文件,它只是:%module api%{    #include "api.h"%}%include "api.h"基本上,如果我APIClass::mbstowcsTest()在 C++ 主函数中调用一切顺利,并且mbstowcs()没有任何问题,如下所示:APIClass *api = NULL;api = new APIClass();api->mbstowcsTest();在 Java 方面,我有:class main {    public static void main(String[] args) {        System.loadLibrary("api");        APIClass api = new APIClass();        api.mbstowcsTest();    }}Java 代码中的问题是,每当代码到达时mbstowcs(),APIClass::mbstowcsTest()我得到的都是像Process finished with exit code -1073740791 (0xC0000409). 谁能告诉我为什么这是一个问题?我尝试使用来自stdlib.hlike 的其他功能abs()并且它起作用了。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 131 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信