我的任务是将C#应用程序迁移到java应用程序。C#应用程序使用两个DLL来完成它的工作,与外围设备相结合。
DLL的标题在C#中如下所示
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
public struct InnerStructure
{
/// COM port used by the device
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = PORT_SIZE)] //7
publi
目前,我正在从事一个项目,该项目要求我接收来自C库的Java调用。基本上,我调用一个接受函数指针的C函数,然后C函数使用函数指针作为回调函数。我使用JNA传递一个Java对象(从现在开始我将其称为回调对象)作为回调函数。回调对象有一个方法,该方法接收一个C结构(称为Frame),该结构包含一个16元素字节数组以及其他变量。我以标准的JNA方式将此结构包装在Java类中,如下所示:
class Frame extends Structure {
public short port;
public short flags;
public Pointer name // th
好的,让jna包装器解决方案在使用jna的dll中映射导出的函数是很容易的:
long f1(int x), just int
long f2(char* y), just char[]
但是如何处理long f3(char** z)呢?
我需要f3的结果(Long)以及Java端的z值。
请不要说应该重写cpp代码来避免这种情况:-)
我正在使用JNA从Java访问一些 dll 函数,这个dll本机函数声明如下:
// it returns (long)
H264_Login (char *sIP, unsigned short wPort, char *sUserName, char *sPassword, LP_DEVICEINFO lpDeviceInfo, int *error); // where LP_DEVICEINFO is a struct
因此,我在库接口中声明如下:
long H264_Login(String sIP, short wPort, String sUserName, String sPa
在使用JNA从C调用Java代码时,我有以下错误:
Native Exception in org.InvokerPackageCallback@3ba987b8
java.lang.Error: Invalid memory access
at com.sun.jna.Native.getStringBytes(Native Method)
at com.sun.jna.Native.getString(Native.java:2248)
at com.sun.jna.Pointer.getString(Pointer.java:681)
at com.sun.jna.Str
我有一个C++函数:
struct Result {
//...
};
bool doSomething(Result[]);
如果我使用以下JNA绑定,则函数调用可以正常工作:
public class Result extends Structure {
//...
}
public interface CPPLibrary extends Library {
public static final CPPLibrary INSTANCE = (CPPLibrary)Native.loadLibrary("dllname");
boolea
我需要在我的程序中使用带有结构的c ++ DLL。为此,我使用JNA,但是,当我试图调用包含另一个struc的结构时,就会发生异常。
这些结构的守则如下:
public class SSP_PACKET extends Structure {
public short packetTime;
public char PacketLength;
public char[] packetData;
@Override
protected List<String> getFieldOrder() {
return Arrays.a
C代码是
extern int APIENTRY LSGetDocData(
short hConnect,
HWND hWnd,
unsigned long *NrDoc,
LPSTR FilenameFront,
LPSTR FilenameBack,
LPSTR Reserved1, // not used must be NULL
LPSTR Reserved2, // not us
我尝试通过JNA使用来自C++的动态链接库来与Fanuc数字控件进行通信,但是总是得到这个错误: Exception in thread "main“java.lang.Error: Invalid memory access 我尝试使用的特定C++方法是这个https://www.inventcom.net/fanuc-focas-library/handle/cnc_allclibhndl3 FWLIBAPI short WINAPI cnc_allclibhndl3(const char *ipaddr, unsigned short port, long timeout, u
我是Java和JNA的新手。我使用JNA从Java加载和使用本机DLL函数。
在传递指向数组的指针时,我面临一个问题。根据规范,我正在从Java填充这个数组,并试图将指向该数组的指针发送到DLL。
本机电话就是这样的,
StartCom(UNUM8 *pCoPData)
From the spec: pCoPData -> Reference of the buffer holding the data
联合作图,
int[] buf = new int[2];
buf[0] = 0x1A;
buf[1] = 0x10;
Pointer pCoPData
我正在使用SystemParametersInfo从user32调用JNA。这是我的JNA接口方法:
boolean SystemParametersInfo(
int uiAction,
int uiParam,
Pointer pvParam,
int fWinIni
);
我就是这样用的:
User32.INSTANCE.SystemParametersInfo(SPI_SETMOUSESPEED, 0,
new IntByReference(2).getPointer(),
SPIF_UPDATEINIFI