有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

C++ java。lang.IllegalArgumentException:函数的参数0处不支持参数

我在从C调用函数时使用JNA时出现了一个类似标题的错误

我正在用Java开发,我想使用来自的函数。我已成功调用另一个函数

这是函数的C头

    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)

有人有其他的地图吗? 致以最良好的祝愿


共 (1) 个答案

  1. # 1 楼答案

    好的,我会回答我自己的问题

    1. 使用JNA
    2. 使用通气器
    3. 将C++标题复制到JNAerator,
    4. 将结果复制粘贴到Java,然后让魔术开始

    这就是我所做的,它神奇地工作