2006年10月19日星期四

Regtlib.exe

终于解决了昨天的问题!问题是这个样子的:
正在和一个客户谈一个项目,需要在客户提供的SDK上进行二次开发,SDK提供了COM接口,他们现在的开发都是用Javascript来实现的。客户要求我们用.NET来实现重新实现其中的一部分功能,提供给我们的东西包含应用程序安装文件和一个TLB文件以及SDK的相关文档。
通过了解.NET和COM之间互操作的相关资料我按照以下步骤进行了尝试,首先利用tlbimp.exe将客户提供的TLB文件产生了一个Interop程序集;然后再把这个程序集引用到C#工程中;最后编写代码实现了一个最简单的功能:读取SDK的版本号,代码如下
try
{
RRX.
IRRXInterface a = new RRX.RRXClass ();
MessageBox .Show(a.GetVersion());
}
catch (Exception ex)
{
MessageBox .Show(ex.ToString(), "DemoRCW" , MessageBoxButtons .OK, MessageBoxIcon .Error);
}
问题出现了,当执行到MessageBox .Show(a.GetVersion());这一句的时候程序就会抛出一个异常
开始怀疑是用户提供的TLB文件有问题,于是就写信给客户把写好的Deomo程序和遇到的问题告诉了他们。今天客户在回信中告诉我说抛出异常是因为我没有在系统中注册那个TLB文件,我需要利用一个注册工具Regtlib.exe来注册这个TLB文件。可是我没有在我的系统中找到这个工具,于是在Google上搜索了一把才知道这个工具包含在Microsoft Libraries Update升级包中,这个更新的详细介绍在这里
安装了这个升级包,然后用Regtlib.exe注册了TLB文件,再运行程序一切OK!

0 comments: