gpt4 book ai didi

java - 如何调用 JNA 到 VB.net ByRef 字符串函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:51:03 28 4
gpt4 key购买 nike

我想从java调用vb.net ByRef和String函数。

vb.net dll 由 UnmanagementExports 制作。

//java
String[] str = {"testJavaWrited"};
String[] str2 = {"testJavaWrited2"};
final VbWrapper wr = (VbWrapper)Native.loadLibrary("vbtestlib", VbWrapper.class);
wr.test(str,str2);
System.out.println(str); // not printed
System.out.println(str2); // not printed

// jna mapping
public interface VbWrapper extends Library {
public int test(String[] str,String[] str2);
}

//vb.net
<DllExport("test", CallingConvention.StdCall)>
Function test(ByRef str As String, ByRef str2 As String) As Integer
MsgBox("test Called") ' printed
MsgBox(str) ' printed
str = "testStringWrited"
str2 = "testStringWrited2"
Return 0
End Function ' heap error

我需要大家的帮助。

最佳答案

我在3F的帮助下解决了这个问题。

jna 映射

public interface CAPI extends Library
{
public int getStringArgs(LongByReference ptr); // see also Pointer etc.
}

java

CAPI l = Native.loadLibrary("DllExportAndJNA", CAPI.class);
...
LongByReference ptr = new LongByReference();
l.getStringArgs(ptr);
(new Pointer(ptr.getValue())).getString(0); // Hello from .NET

vb.net代码

[DllExport]
public static int getStringArgs(ref IntPtr ptr)
{
ptr = Marshal.StringToCoTaskMemAnsi("Hello from .NET")
return 0;
}

[DllExport]
public static void freeString(ref IntPtr ptr)
{
Marshal.ZeroFreeCoTaskMemAnsi(ptr)
return;
}

https://github.com/3F/DllExport/issues/25

关于java - 如何调用 JNA 到 VB.net ByRef 字符串函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41830352/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com