我有某种库,我正在为其编写包装器,然后我尝试在其上生成 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 off
call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x64
swig -c++ -java -outdir java api.i
set CompilerFlags=-nologo -Zi
pushd build
cl %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 /EHsc
popd
COPY .\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()并且它起作用了。
相关分类