首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何调用JNA到VB.net ByRef字符串函数

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

Stack Overflow用户
提问于 2017-01-24 22:10:34
回答 1查看 268关注 0票数 1

我想从java中调用vb.net ByRef和字符串函数。

vb.net动态链接库是由UnmanagedExports制作的。

代码语言:javascript
运行
复制
//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

我需要你们的帮助。

EN

回答 1

Stack Overflow用户

发布于 2017-02-03 19:42:57

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

jna映射

代码语言:javascript
运行
复制
public interface CAPI extends Library
{
    public int getStringArgs(LongByReference ptr); // see also Pointer etc.
}

java

代码语言:javascript
运行
复制
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代码

代码语言:javascript
运行
复制
[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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41830352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档