记录:
最近有个项目需要调用本地COM组件,但是我们是java开发的BS架构。之前的做法是注册一个ocx调用,但是维护成本大而且不算稳定,于是这几天想研究下解决方案。
最后决定用C#开发一个本地的websocket调用读卡dll。
之前并没有C#开发经验,单纯自己摸索,还好需求不算难,多搜搜框架就搭了七七八八。
过程中发现只有InvokeMember()能成功调用,Invoke都会调用失败,尝试了几次发现打印出来的方法并没有我需要的。最后也没研究出来为啥。
接口入参为三个字段,其中第三个是ref,InvokeMember成功调用了以后没有返回ref字段,网上说的方法都试了下没有什么用。
最终找到以下博客:
利用反射技术动态执行方法时如何取引用类参数的值 - 梦想(胡大利) - 博客园 (cnblogs.com)
ParameterModifier[] ParamMods = new ParameterModifier [1];
ParamMods[0] = new ParameterModifier (3); // 初始化为接口参数的个数
ParamMods[0][2] = true; // 设置第三个参数为返回参数
指定第三个参数为返回参数,成功返回。