无法注册类型库

Unable to register a type library

这是在 Delphi XE7 中。我有一个现有的类型库(用于动态虚拟通道 - 客户端)并且需要向接口添加一个方法,以便客户端的应用程序可以与 dll 对话以通过虚拟通道发送消息。我创建了一个新界面,为其获取了一个新的 GUI,修改了 .idl 文件(Windows SDK 在 Windows SDK[=36= 中提供了 tsvirtualchannels.idl 文件]).

我使用 midl 从 .idl 创建 .tlb 类型库,然后 运行 tlibimp(Embarcadero 实用程序 ) 生成 delphi -tlb.pas

我的Delphiclass实现了新方法。但是新界面未在 Windows 中注册,并且所有使用 Embarcadero tregsvr(运行 在提升的命令提示符 中)注册库的尝试都失败了消息 访问 OLE 注册表时出错

我试过手动注册新界面。我创建了类似于 IWTSListener 的界面,并通过注册表找到该键,导出它,然后将界面名称更改为我的,将 GUID 更改为新的 GUID,然后重新导入它。有四种情况。

当客户端 dll 启动时,它会启动进程外服务器并将其传递给 Agile Reference(客户端 dll 接口。敏捷参考是 MTA 应用程序如何与 STA 对话)。但是,当我查询接口以获取新接口时,我得到 interface not supported.

我或多或少已经放弃了 tregsvr。它不提供错误的详细信息。我还需要做些什么来注册新界面吗?

我想到有一两件事可能会阻止此操作过程的进行:

  1. 我没有把dll主界面IWTSPlugin改成IWTSPlugin2。 Windows(即 mstsc)会为虚拟通道使用 IWTSPLUGIN2 吗?为此添加一个新接口而不更改它是一个致命的罪过(我知道-我过错)。

我最终解决了这个问题。该权力已向 Windows 添加了一项政策,以便 tregsvr 不会为所有用户注册类型库,只有当它具有 -t -c 参数才能为当前用户注册它时。发现后一片哗然...