qq_41303571 2025-01-22 16:58 采纳率: 0%
浏览 71

java使用jacob调用com组件,所得的返回值为null

img


我是java使用jacob调用com组件,所得的返回值为null,这个要怎么解决?以下是我的代码:


public static void main(String[] args) throws ParseException {
         // 初始化JACOB库,加载DLL文件
        ComThread.InitSTA(false);
        
        // 初始化COM组件
        ActiveXComponent comComponent = new ActiveXComponent("YinHai.XJ.Actual.Interface.New.1.0");
        
        try {
            
            //ActiveXComponent comComponent = new ActiveXComponent("Excel.Application");
            // 创建Dispatch对象
            Dispatch dispatch = (Dispatch)comComponent.getObject();
            
            //Methods
           //Dispatch dispatch = comComponent.getProperty("COClass_n_yh_interface_n").toDispatch();
            
            //Dispatch dispatch1 = comComponent.getProperty("In_ybjk_interface").toDispatch();
            
            System.out.println("dispatch:"+dispatch);
            YBQLC_IN ybqlc_IN = new YBQLC_IN();
            ybqlc_IN.setTransNo("1401");
            ybqlc_IN.setTransType("passwordCheck");
            
            String format= "yyyyMMddHHmmss";

            SimpleDateFormat sdf= new SimpleDateFormat(format);
            
            String date = sdf.format(new Date());
            
            ybqlc_IN.setTimestamp(date);
            
            YBQLC_IN_Data in_Data = new YBQLC_IN_Data();
            in_Data.setFixmedinsCode("1020001");
            in_Data.setPsnNo("");
            in_Data.setBusinessType("01101");
            in_Data.setOpterId("1");
            in_Data.setOpterName("管理员");
            in_Data.setDeptId("0001");
            in_Data.setDeptName("内科");
            //in_Data.setDeviceType("1");
            
            ybqlc_IN.setData(in_Data);
            
            String in_data_json = new Gson().toJson(ybqlc_IN);
            
            YBQLC_OUT ybqlc_OUT = new YBQLC_OUT();
            
            ybqlc_OUT.setCode("");
            ybqlc_OUT.setMessage("");
            
            YBQLC_OUT_Data out_Data = new YBQLC_OUT_Data();
            out_Data.setAuthNo("");
            out_Data.setBirthday("");
            out_Data.setChnlld("");
            out_Data.setEcIndexNo("");
            out_Data.setEcQrCode("");
            out_Data.setEcToken("");
            out_Data.setEmail("");
            out_Data.setGender("");
            out_Data.setIdNo("");
            out_Data.setIdType("");
            out_Data.setInsuOrg("");
            out_Data.setUserName("");
            out_Data.setNationality("");
            
            ybqlc_OUT.setData(out_Data);
            ybqlc_OUT.setOrgId("");
            String out_data_json = new Gson().toJson(ybqlc_OUT);
            
            // 创建参数
            Variant param1 = new Variant("1401");
            Variant param2 = new Variant(in_data_json);
            Variant param3 = new Variant(out_data_json);
            
            // 调用COM组件的方法,传递参数
            
            Variant result = Dispatch.invoke(dispatch, "gxyb_call",Dispatch.Method, new Variant[] {param1,param2,param3}, new int[1]);
          
            System.out.println("result1:"+result);
            
        } catch (ComFailException e) {
            e.printStackTrace();
        } catch (UnsatisfiedLinkError e1) {
            e1.printStackTrace();
        }finally {
            
            // 关闭 COM 组件,释放资源
            comComponent.safeRelease();
            
                        ComThread.Release(); // 释放资源
        }
    }
  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你的代码来看,调用 COM 组件的 gxyb_call 方法并获取返回值时,返回值为 null 可能有几个原因。以下是一些可能的问题和解决方案:

    1. COM 组件是否正确加载和初始化:确保 COM 组件已正确安装并注册,并且 DLL 文件已正确加载。你可以通过检查 comComponent 是否为 null 来确认这一点。如果 comComponentnull,则表示无法加载或初始化 COM 组件。
    2. 方法调用参数问题:检查传递给 gxyb_call 方法的参数是否正确。确保每个参数的类型和值与预期匹配。特别注意字符串参数,确保它们不是 null 且符合方法的期望格式。
    3. 方法返回值处理:在调用方法后,检查 result 是否为 null。如果 resultnull,则可能意味着方法没有正确返回预期的值。确认 COM 组件的方法是否应该有返回值,以及返回值是否正确处理。
    4. 异常处理:你的代码中包含了异常处理,但可能漏掉了某些异常类型。确保捕获所有可能的异常,并打印详细的错误信息,以便确定问题的根源。
    5. 资源释放问题:确保在 finally 块中正确释放 COM 组件和资源。如果资源未正确释放,可能会导致后续操作失败。
    6. 调试和日志记录:在关键步骤添加打印语句,以获取更多关于过程的详细信息。这有助于确定问题发生的确切位置。
    7. 检查 COM 组件文档:确保你遵循了 COM 组件的文档和指南。有时,错误的使用方法或误解文档中的信息可能导致问题。

    如果你检查了以上所有点并仍然遇到问题,建议联系 COM 组件的供应商或开发者以获取更多帮助。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月22日