JNA无效的内存访问

时间:2017-09-12 12:30:11

标签: java c++ jna

我测试JNA是为了包装大dll。具有不同类型args的基本功能起作用。但是当我们将(甚至是简单的)批准的代码包含在内部的标准方法mbstowcs_s时,apears:

Exception in thread "main" java.lang.Error: Invalid memory access
    at com.sun.jna.Native.invokePointer(Native Method)
    at com.sun.jna.Function.invokePointer(Function.java:490)
    at com.sun.jna.Function.invokeString(Function.java:654)
    at com.sun.jna.Function.invoke(Function.java:427)
    at com.sun.jna.Function.invoke(Function.java:354)
    at com.sun.jna.Library$Handler.invoke(Library.java:244)
    at com.sun.proxy.$Proxy0.TestWCHAR_in(Unknown Source)
    at gov.nbu.App.main(App.java:85)

所有版本32位。

1 个答案:

答案 0 :(得分:0)

问题不在JNA中。它出现在某些机器的Cpp端(我的情况)。这是:

void TestVoid(void)
{
    wchar_t                     wcBuffer[2600]      = {};
    size_t                      szOut               = 0;
    std::string                 Path                = "This message for test WCHAR.";
    errno_t                     errCode             = 0;

    // Work:
    errCode = mbstowcs_s(&szOut, wcBuffer, sizeof(wcBuffer), (char*)Path.c_str(), Path.size());
    // Not work:
    errCode = mbstowcs_s(&szOut, wcBuffer, Path.size(), (char*)Path.c_str(), Path.size()); 
}