我正在尝试使用 ADTF从我自己的C++命令行应用程序中运行一个完整的ADTF配置。ADTF版本:2.9.1 (相当旧)。
以下是我要做的事情:
使用session-manager服务完成2和3,请参阅ISessionManager接口:manager.html、#en3# LoadGlobalsFromFile和LoadConfigFromFile.
问题是,我不知道如何执行第1点( _runtime->RegisterPlugin,_runtime->CreateInstance ):目前,我使用_runtime->RegisterPlugin,_runtime->CreateInstance和_runtime->RegisterObject.手动加载服务列表,而不是加载清单
我所做的就是只加载命名空间服务,并使用INamespace接口,该接口有一个加载清单文件的方法:namespace.html --参见ImportFile with ui32ImportFlags =
但是--它只将清单设置加载到名称空间中,实际上并不实例化服务。我可以手动完成,方法是:
但是我希望这是一个更加的健壮的,我希望已经有了,一个处理填充的名称空间的服务,然后是并执行这些操作。有这样的服务吗?
注意:如果您知道如何在ADTF3中这样做,那么可能也对有帮助,所以请不要犹豫地回答/评论
更新
请参阅本页上的“系统流程”:layer.html
显然,运行时实例本身处理清单文件(请参阅运行级关机&内核),但我不知道该如何告诉它它在哪里。
在实例化cRuntime时,我尝试将命令行参数设置为count = 2和2=清单文件路径。它不工作:)。
发布于 2018-12-01 12:51:58
找到了答案,但不是我所期望的。我试着调试adtf_runtime.exe,以找出它传递给cRuntime的参数。
其结果确实与我所怀疑的(而且实际上已经尝试过)相似:
虽然这个建议,cRuntime确实负责加载和处理清单,但结果发现并不完全是,向它传递相同的参数并没有完成任务。当我注意到adtf_runtime.exe实际上正在使用cRuntime的扩展cRuntimeEx,这是而不是SDK的一部分(至少我还没有找到)时,就给出了答案。
这个类是,是ADTF库的导出符号中的一个,即"dumpbin /symbols adtfsdk_290.lib“在某个点上呈现:
public:__cdecl adtf::cRuntimeEx::cRuntimeEx(int,const ** const,class ucom::IException * *)
但是它是,不是SDK的一部分(您将找不到定义它的头文件)。
在的方法中,您还会发现以下内容:
保护: long __cdecl adtf::cRuntimeEx::LoadManifest(类adtf_util::cString const &,class std::set,class std::allocator > *,class ucom::adtf_util::cString* *)
瞧。因此,不幸的是,我无法以一种强有力的方式实现我想要的。:)
我的最终手动实现了清单加载逻辑的,因为cRuntimeEx在SDK中没有可用的。类似于这样的东西:
发布于 2018-12-11 10:52:38
在ADTF3中,您只需使用提供的cADTFSystem类来启动ADTF系统,然后使用ISessionManager接口加载您选择的会话。
发布于 2018-11-30 13:12:03
唯一需要做的就是用元文件(清单)启动adtf启动程序。这适用于adtf 2和adtf 3,它可以完成(控制台)应用程序。如果您还想在adtf 3中做更多的工作,可以使用adtf控件而不是adtf启动程序及其脚本接口(参见示例中的脚本)。
https://stackoverflow.com/questions/53547130
复制相似问题