我在 Delphi 中使用动态虚拟通道时遇到了一些问题

f1tvaqid  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(118)

我正在基于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,所以我不确定如何处理这些问题。

iyr7buue

iyr7buue1#

midl.exe(来自Windows SDK)应该能够从idl文件生成tlb
如果idl文件中没有库定义,您可以自己添加一个,正如Hans Passant在他对this question的回答中所解释的那样。

相关问题