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

我有某种库,我正在为其编写包装器,然后我尝试在其上生成 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()并且它起作用了。


手掌心
浏览 132回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java