JNA无效的内存访问

JNA invalid memory access

本文关键字:访问 内存 无效 JNA      更新时间:2023-10-16

我要在包装大dll之前对JNA进行测试。具有不同类型的基本功能ARG可以工作。但是,当我们包装具有标准方法 mbstowcs_s 内部的(甚至简单)批准的代码时,出现:

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)

所有版本32bit。

问题不在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()); 
}