我对 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 在他对 的回答中所解释的那样。
我正在基于 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 在他对