java.lang.IllegalArgumentException:函数的参数0处不支持参数
我在从C调用函数时使用JNA时出现了一个类似标题的错误 我正在用Java开发,我想在C中使用.dll中的一个函数。我已经成功地调用了另一个函数 这是函数的C头java.lang.IllegalArgumentException:函数的参数0处不支持参数,java,c++,dll,native,jna,Java,C++,Dll,Native,Jna,我在从C调用函数时使用JNA时出现了一个类似标题的错误 我正在用Java开发,我想在C中使用.dll中的一个函数。我已经成功地调用了另一个函数 这是函数的C头 SERVICE_API BOOL apiDoTransactionEx ( ITransactionIn* transactionReq, ITransactionOut* transactionResp, unsigned short nApplicationNumber, unsigned ch
SERVICE_API BOOL apiDoTransactionEx
( ITransactionIn* transactionReq,
ITransactionOut* transactionResp,
unsigned short nApplicationNumber,
unsigned char *inBuffer,
unsigned long inBufferSize,
unsigned char *outBuffer,
unsigned long *outBufferSize );
class ITransactionOut
{
public:
virtual char* getAmount() = 0;
virtual char* getC3Error() = 0;
virtual char* getCurrencyCode() = 0;
virtual char* getTerminalNumber() = 0;
virtual char* getUserData1() = 0;
virtual char* getPrivateData() = 0;
};
class ITransactionIn
{
public:
virtual bool setAmount(char* amount) = 0;
virtual char* getAmount() = 0;
virtual bool setTermNum(char* termNum) = 0;
virtual char* getTermNum() = 0;
virtual bool setCurrencyCode(char* currencyCode) = 0;
virtual char* getCurrencyCode() = 0;
virtual bool setOperation(char* operation) = 0;
virtual char* getOperation() = 0;
virtual bool setAuthorizationType(char *type) = 0;
virtual char* getAuthorizationType() = 0;
virtual bool setCtrlCheque(char* ctrlCheque) = 0;
virtual char* getCtrlCheque() = 0;
virtual bool setUserData1(char* data) = 0;
virtual char* getUserData1() = 0;
};
目前我在Java中的映射是
boolean apiDoTransactionEx(ITransactionIn transIn,
ITransactionOut transOut,
int appNumber,
String inBuffer, //extdatain
long inBufferSize, //extdatainsize
String outBuffer, //extdataout
long[] outBufferSize //extdataoutsize
);
public interface ITransactionIn
{
boolean setAmount(String amount);
String getAmount();
boolean setTermNum(String termNum);
String getTermNum();
boolean setCurrencyCode(String currencyCode);
String getCurrencyCode();
boolean setOperation(String operation);
String getOperation();
boolean setAuthorizationType(String type);
String getAuthorizationType();
boolean setCtrlCheque(String ctrlCheque);
String getCtrlCheque();
boolean setUserData1(String data);
String getUserData1();
}
public interface ITransactionOut
{
String getAmount();
String getC3Error();
String getCurrencyCode();
String getTerminalNumber();
String getUserData1();
String getPrivateData();
}
但是每当我调用函数时,它总是会返回这样的错误
Exception in thread "JavaFX Application Thread"
java.lang.IllegalArgumentException: Unsupported argument type com.cashlez.km.client.controllers.IPEKInjectorController$2 at parameter 0 of function apiDoTransactionEx
at com.sun.jna.Function.convertArgument(Function.java:626)
at com.sun.jna.Function.invoke(Function.java:305)
at com.sun.jna.Library$Handler.invoke(Library.java:236)
at com.sun.proxy.$Proxy5.apiDoTransactionEx(Unknown Source)
有人有其他的地图吗?
致意。好的,我会回答我自己的问题
这就是我所做的,它神奇地工作了。我仍然没有找到完成这项工作的正确方法。。任何人都可以帮助你?你不能仅仅创建一个以C++类命名的java接口,并期待魔法发生。Java代码是如何获得这些接口的实例化的?你可以在原生和java之间来回传递C++对象,如<代码>指针< />代码,但是JNA不知道如何将任意java接口转换成本机类型,除非你告诉它如何。