小论QA职责
作者:网络转载 发布时间:[ 2013/4/10 13:11:54 ] 推荐标签:
搞来搞去,离夜深越来越近,我们不犯困,却有点更加迷惑了,不make sense呀!
那笨人有笨招,细化问题吧!
实验一:
我把COM组件的工程单独领出来,修改工程的属性,启用编译后自动注册开关,编译成功,看注册表应该注册成功;在创建一个新的工程来调用COM组件:
1: Type comType = Type.GetTypeFromProgID("COM ProgID");
2: object comObj = System.Activator.CreateInstance(comType);
3: Type[] t = comType.GetInterfaces();
4:
5: object x=comType.InvokeMember("MethodName", BindingFlags.InvokeMethod, null, comObj, new object[3] { null,null,null});
6: MethodInfo[] method = comType.GetMethods();
7: if (method != null)
8: {
9:
10: }
执行程序,在第2出错,和之前的安装程序的错误日制一致。(COM异常不说了,不影响理解问题)
这个实验只能在此证明问题还没有解决,不在那里,在这里
紧接着:
实验二:
我把COM组件中的具体实现代码全部注释掉,如果函数需要返回值,仅仅返回一个fake的值,这样我的COM近似等于一个空壳,不依赖于任何第三方,编译,注册成功,在用上面的代码创建COM对象的实例。
实验结果:成功!
这是一大进步,通过实验二可以大胆确定问题出在COM对象的实现代码里,那究竟是哪一块代码呢,很明显,应该是类的构造函数里,这意味着COM对象在构造的时候抛出未捕获异常,导致终显示给我们的那段错误日志信息!
这时候,再去review构造函数,发现构造函数是有try catch的,只不过。。只不过。。构造函数的第一行没有包含在try catch block里,这一行只不过是打印了一条调试日志而已啊,真不敢相信这是元凶,这行代码like:
utilDebug.Log(.....)
我相信你不是无辜的。
现在,再来看看这个utilDebug到底是啥玩意:


sales@spasvo.com