我对 Delphi 中的动态虚拟频道有点困惑

I'm a bit stuck with Dynamic Virtual Channels in Delphi

我正在基于 C++ 中的 https://github.com/earthquake/UniversalDVC/tree/master/UDVC-Plugin 将 RDS(又名终端服务)中的动态虚拟通道代码从 C++ 转换为 Delphi。这需要几个 类 来注册客户端插件,我在 C:\Program Files (x86)\Windows Kits\Include.0.17763.0\um 的 Windows 系统上的 tsvirtualchannels.h.idl 中找到了定义。

不幸的是 .idl 文件不包含类型库,所以我无法构建类型库 .tlb 文件并导入它,所以我一直在 [=31] 中手动重新创建它=].

Embarcadero 使用 .ridl 文件,与 idl 文件相似但不完全相同。 .idl 文件中的属性之一是 cpp_quote("string")。例如

cpp_quote("EXTERN_C __declspec(selectany) const IID IID_IWTSListenerCallback = {0xA1230203, 0xd6a7, 0x11d8, {0xb9, 0xfd, 0x00, 0x0b, 0xdb, 0xd1, 0xf1, 0x98}};")
[
object,
uuid(A1230203-d6a7-11d8-b9fd-000bdbd1f198),
oleautomation,
helpstring("interface IWTSListenerCallback")

]
interface IWTSListenerCallback : IUnknown    

Ridl 不支持 cpp_quote,所以我不确定如何处理这些。

midl.exe(来自 Windows SDK)应该能够从 idl 文件生成 tlb

如果 idl 文件中没有库定义,您可以自己添加一个,正如 Hans Passant 在他对 的回答中所解释的那样。