我为.Net 4.0创建了一个测试COM项目.然后我用regasm注册它:
RegAsm /codebase TestCom.dll /TLB
Run Code Online (Sandbox Code Playgroud)
它在JavaScript中正常工作:
var app = new ActiveXObject("TestCom.TestClass");
app.Message1("123");
Run Code Online (Sandbox Code Playgroud)
我想从.Net 3.5的另一个C#项目中使用TestCom.TestClass,但是当我尝试添加对该项目的引用时,我收到有关更高框架版本的错误."添加引用"对话框(部分COM)仅显示对tlb文件的引用,而不是dll.
它应该是这样的吗?当我尝试添加对tlb文件的引用时,我收到错误:
"添加对.NET程序集的引用"
如何从.Net 3.5的另一个C#项目创建TestCom.TestClass的实例?
IDE可以从类型库中判断出您选择的COM服务器是在.NET中实现的.它只是拒绝让你添加它,这样做没有意义.当你添加对.NET程序集的引用时,它也会更好,实际上更好.
它不像你不能欺骗机器,你可以使用动态关键字的后期绑定.IDE没办法干扰它.但实际上,您并没有像非托管客户端使用服务器那样测试COM服务器.CLR将在运行时发现COM服务器实际上是一个.NET服务器并快捷方式管道.换句话说,它不会为服务器创建RCW.并且服务器不会创建CCW,现在它的工作方式与添加程序集引用时的工作方式完全相同.
所以这样做真的没有意义.只需添加程序集引用,即可享受IntelliSense支持和静态类型检查带来的诸多优势.并以测试任何.NET库的方式测试COM服务器代码.COM互操作层是你不测试,从根本上无法测试的.哪个没关系,这不是真的有问题.如果它是出于一些神秘的原因那么它就不会像你能做的那样,CLR内部的COM互操作无论如何都是黑盒子.
除了测试服务器代码之外,您还需要执行集成测试.只需确保实际的非托管客户端实际上可以使用服务器.你做到了,你已经知道它可以从Javascript中运行良好.
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |