吵吵   2017-11-19  阅读:1,708

接上面的话题继续,话说我在vb的代码中找到cacheobject竟然可以直接赋值属性和调用方法,觉得简直不可思议。

后来才发现还是我太年轻!你不知道有个东西叫做dynamic么?动态编译!

说来也是惭愧,我吧CacheObject.dll放到vs2010当中去添加引用,除了看到factory类下面的一些connect方法等等外,并没有看到类的其它属性和方法,那么vb中那逆天的调用究竟从哪里来的,甚至保存这个记录的Sys_save()方法也没有!

偶然间我翻到了New方法的定义:

public virtual dynamic New(string ClassName, [object vtInit = System.Type.Missing])
CacheObject.FactoryClass 的成员

看到一个dynamic的返回类型,突然看到一阵光!以前在做数据库表和C#类的映射(对象关系映射ORM)的时候探讨过这个话题,可以在吵吵博客翻一番,除了采用反射之外,还有用动态编译的,没错!这里估计也是一样可以用的!

于是乎我立马搞了段代码试试:

dynamic obj = factory.New(“DHCLAB.DHCMIFResultGraph”);
if (obj != null)
{
string strReturn = obj.DeleteByType(Machine, Episode, GraphType);
obj.SYS_Close();
obj = null;
return strReturn;
}

哈哈哈!可以直接调用DeleteByType这个数据库那边才定义了的方法!

DHCLAB.DHCMIFResultGraph是东华LIS用于存储图像的类(你叫表也可以),一直想弃用开发效率低,经常崩溃的vb用来做一些电脑端运行的LIS接口,奈何图片传输用不了vism.ocx控件,所以只能将就!

现在我不将就了,花了一天全部重写成为了c#!

实测通过!再也不用vb6了,真的不用,恶心呀,上次因为ASCII和unicode的问题,硬是调用一个windows API都搞了一天!

再跑去InterSystem的帮助文档里看了看,其实人家也没有说CacheObject.dll是vb用的,而且是属于ActiveX控件的。

Using ActiveX with Caché

第二天早上我发现有张图片保存错误,直接弹出一个提示窗口来了,而程序的线程却照常运行,不好,错误捕捉不到啊!

哎!错误还是vb的error类,加了一个try catch,但我怀疑是否能够捕获,明天在看罗。

引用CacheObject.dll的时候,我发现和CacheClient.dll中的CacheObject类冲突!咦,莫非其实c#的话用CacheClient.dll中的CacheObject类会更好,CacheObject.dll可能人家真的是留给vb用的!

后续再研究吧!

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

一条回应:“其实c#也可以用CacheObject.dll的!”

  1. 好特易购说道:

    用胶水就用乐泰胶水和可赛新胶水这才是正确的选择 https://www.hyhaote.com

发表评论

电子邮件地址不会被公开。 必填项已用*标注