我想从C或C ++对WinRT对象进行动态(即基于反射)调用。我将假设我在运行时可以使用winmd文件,以便我可以找出方法是什么以及它们采用的参数。
在OLE自动化中,IDispatch随后可用于进行实际调用。但是,WinRT对象不支持IDispatch。我怎么才能打电话?根据处理器的COM调用约定,我是否需要某种允许动态传递参数的FFI库?或者我真的需要“静态”类/结构声明(对于C / C ++)?
编辑:目标系统是一个都市风格的应用程序。这就排除了涉及禁用API的解决方案。
答案 0 :(得分:2)
当然可以构建您正在描述的内容 - 这正是Chakra Javascript引擎对winrt元数据的作用,与CLR的作用类似。这两种语言预测都会在运行时发现API并构建低级程序集以实现此目的。
这是一项很多工作,并不是特别令人愉快,但它在技术上绝对可行。 Windows元数据包含为API和结构创建存根所需的所有信息。