🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
ObjectImpl.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstCOM.h"
25#include "AstCOM/COMAPI.hpp"
26#include "AstUtil/Object.hpp"
27#include "AstUtil/Encode.hpp"
28#include "AstUtil/RTTIAPI.hpp"
29#include <unknwn.h>
30#include <oaidl.h>
31#include <atlbase.h>
32#include <atlcom.h>
33
34AST_NAMESPACE_BEGIN
35
41template <typename T, const IID* piid = &__uuidof(T)>
43 public IDispatchImpl<T, piid, &IID_NULL, 0xFFFF, 0xFFFF>
44 // 使用 &IID_NULL, 0xFFFF, 0xFFFF时,会直接从当前动态库加载TypeLib,避免了注册COM组件
45{
46public: // 接口重写
47 HRESULT __stdcall Children(
48 /* [in] */ BSTR name,
49 /* [retval][out] */ IObject **ppRetVal) override
50 {
51 if(ppRetVal == nullptr)
52 return E_POINTER;
53 std::string nameStr = aWideToUtf8(name);
54 Object* child = aFindChild(GetNativeObject(), nullptr, nameStr);
55 if (child == nullptr)
56 {
57 *ppRetVal = nullptr;
58 return S_OK;
59 }
60 auto comObject = aComGetObject(child);
61 if(comObject)
62 comObject->AddRef();
63 *ppRetVal = comObject;
64 return S_OK;
65 }
66public: // 辅助函数
67
70 {
71 return object_.get();
72 }
73
75 void SetNativeObject(Object* object)
76 {
77 object_ = object;
78 }
79
81 template<typename U>
82 U GetNative() const
83 {
84 return aobject_cast<U>(object_.get());
85 }
86private:
87 WeakPtr<Object> object_;
88};
89
90
93AST_NAMESPACE_END
定义 ObjectImpl.hpp:45
Object * GetNativeObject() const
获取原始对象指针
定义 ObjectImpl.hpp:69
void SetNativeObject(Object *object)
设置原始对象指针
定义 ObjectImpl.hpp:75
U GetNative() const
获取原始对象指针
定义 ObjectImpl.hpp:82
对象基类,继承自该类的对象可以使用运行时类型信息相关功能,实现强弱引用计数、运行时元信息(属性访问、序列化等)等基础功能
定义 Object.hpp:86
弱引用指针
定义 WeakPtr.hpp:35
Object * aFindChild(Object *parentScope, Class *cls, StringView name)
查找对象的子对象
定义 RTTIAPI.cpp:240
errc_t aWideToUtf8(const wchar_t *wide, std::string &utf8)
将宽字符编码的字符串转换为UTF-8编码
定义 Encode.cpp:219
定义 AstCOM.idl:27
IObject * aComGetObject(Object *obj)
获取对象的COM接口
定义 COMAPI.cpp:32