3

我已经使用 JNAerator 将 .dll 库转换为 JAR。现在我需要调用如下所示的 OpenTCPIPPort_V 方法: public static short OpenTCPIPPort_V(Pointer<Byte > tcpPort, Pointer<Byte > IPAddr)

如何将两个字符串值传递给此方法?

4

3 回答 3

7

我找到了解决方案。这是方法Pointer<Byte> org.bridj.Pointer.pointerToCString(String string)

于 2013-01-13T08:23:15.800 回答
1

我尝试了 Tekvisa DLL(用于控制 Tektronix 测量仪器的 DLL)的 pointerToCString,它无法打开仪器会话。该线程中的第二个答案更好,但遗漏了一个细节:字节数组必须以 0 结尾。我的代码如下。(仪器变量是字符串类型,包含仪器字符串,例如“TCPIP::::INSTR”。)

有趣的是,pointerToCString 在向仪器发送命令时起作用,例如 viWrite("*IDN?")。

  Pointer<Byte> pViString = Pointer.allocateBytes(instrument.length() + 1);
  byte[] instrumentBytes = instrument.getBytes();
  pViString.setBytes(instrumentBytes);
  pViString.setByteAtIndex(instrument.length(), (byte) 0);
于 2013-02-21T18:18:59.357 回答
0

String 类中有一个名为 getBytes 的函数。这是一个例子:

String example = "example, string";
byte[] bytes = example.getBytes();

您现在需要将这些 byte[] 值放入您的指针中。我想你现在可以应付了。

于 2013-01-12T20:45:36.410 回答