【发布时间】:2014-02-28 14:53:12
【问题描述】:
我有一个名为“GrpSvr.tlb”的旧 .TLB 文件,它包含一个名为 GrpCall 的类。我已经使用regtlibv12.exe 在我的Win7 x64 机器上注册了.tlb,它工作正常。我想从 C# 调用这个库的方法,所以首先我尝试了:
Type objectType = System.Type.GetTypeFromProgID("GrpSvr.GrpCall");
dynamic thirdPartyDLLObject = System.Activator.CreateInstance(objectType);
但这会为objectType 返回null。
问题 1. 我可以以这种方式调用我的 .TLB 文件吗?在这种情况下我做错了什么?
后来我决定放弃这种方法
其中描述了如何使用MSs Type Library Importer 创建 C# DLL。我遵循了这一点,并使用以下命令从GrpSrv.tlb 创建了GrouperServer.dll:
C:\Program Files (x86)\Microsoft Visual Studio 12.0>tlbimp F:\Groupers\DRGROUP\GrpSvr.tlb /out:C:\GrouperServer.dll /nam espace:GrouperServer Microsoft (R) .NET Framework 类型库到程序集转换器 4.0.30319.33440 版权所有 (C) 微软公司。保留所有权利。
TlbImp : 类型库导入 C:\GrouperServer.dll
然后我将此 DLL 导入到我的 C# 项目中(并在 this answer 之后设置 Embed interop Types = false)并尝试通过调用该类
GrouperServer.GrpCallClass grouperServer = new GrouperServer.GrpCallClass();
但这不起作用,在运行时我收到以下错误:
在 DrGroupIN.exe 中发生了“System.Runtime.InteropServices.COMException”类型的第一次机会异常
附加信息:检索具有 CLSID {FFB54BC4-B15E-11D1-99BC-0000E803C444} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG))。
遵循
中给出的建议然后我将项目设置为以 x86 为目标,但这在这种情况下没有帮助。
问题 2:为什么会出现这个错误,我该如何解决?
【问题讨论】:
-
它在一个通用文件夹中,没有特别之处......