我正在基于C中的https://github.com/earthquake/UniversalDVC/tree/master/UDVC-Plugin将RDS(又名终端服务)中的动态虚拟频道的代码从C转换为 Delphi 。这需要几个类来注册客户端插件,我在C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
的Windows系统上找到了tsvirtualchannels.h
和.idl
中的定义。
不幸的是,.idl
文件不包含类型库,所以我无法构建类型库.tlb
文件并导入它,所以我一直在 Delphi 中手动重新创建它。
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,所以我不确定如何处理这些问题。
1条答案
按热度按时间iyr7buue1#
midl.exe
(来自Windows SDK)应该能够从idl
文件生成tlb
。如果
idl
文件中没有库定义,您可以自己添加一个,正如Hans Passant在他对this question的回答中所解释的那样。