🛰️航天仿真算法库 SpaceAST 0.0.1
载入中...
搜索中...
未找到
LinkToObjectImpl.hpp
浏览该文件的文档.
1
20
21#pragma once
22
23#include "AstGlobal.h"
24#include "AstCOM.h"
25#include "AstCOM/COMAPI.hpp"
26#include "AstSim/SpaceObject.hpp"
27#include "AstUtil/Object.hpp"
28#include "AstUtil/Encode.hpp"
29#include "AstUtil/RTTIAPI.hpp"
30#include <unknwn.h>
31#include <oaidl.h>
32#include <atlbase.h>
33#include <atlcom.h>
34#include <vector>
35
36AST_NAMESPACE_BEGIN
37
43template <typename T, const IID* piid = &__uuidof(T)>
45 public IDispatchImpl<T, piid, &IID_NULL, 0xFFFF, 0xFFFF>
46{
47public:
48 ILinkToObjectImpl() = default;
49 ~ILinkToObjectImpl() = default;
50
51 HRESULT __stdcall BindTo(BSTR objectPath) override
52 {
53 if (objectPath == nullptr)
54 return E_POINTER;
55
56 std::string path = aWideToUtf8(objectPath);
57 aSpaceObject_SetReferenceVehicle(spaceObject_.get(), path);
58 return S_OK;
59 }
60
61 HRESULT __stdcall get_AvailableObjects(SAFEARRAY** pVal) override
62 {
63 return E_NOTIMPL;
64 }
65
66 HRESULT __stdcall get_IsIntrinsic(VARIANT_BOOL* pVal) override
67 {
68 return E_NOTIMPL;
69 }
70
71 HRESULT __stdcall get_LinkedObject(IObject** ppRetVal) override
72 {
73 if (ppRetVal == nullptr)
74 return E_POINTER;
75
76 *ppRetVal = nullptr;
77
78 auto referenceSpaceObject = aSpaceObject_GetReferenceVehicle(spaceObject_.get());
79 auto comObject = aComGetObject(referenceSpaceObject);
80 if (comObject)
81 {
82 comObject->AddRef();
83 *ppRetVal = comObject;
84 }
85 return S_OK;
86 }
87
88 HRESULT __stdcall get_Name(BSTR* pVal) override
89 {
90 if (pVal == nullptr)
91 return E_POINTER;
92
93 *pVal = nullptr;
94 auto referenceSpaceObject = aSpaceObject_GetReferenceVehicle(spaceObject_.get());
95
96 if (referenceSpaceObject)
97 {
98 std::wstring name = aUtf8ToWide(referenceSpaceObject->getName());
99 *pVal = SysAllocString(name.c_str());
100 }else{
101 *pVal = SysAllocString(L"");
102 }
103
104 return S_OK;
105 }
106
107public:
108 void SetNativeParentObject(SpaceObject* object)
109 {
110 spaceObject_ = object;
111 }
112
113private:
114 WeakPtr<SpaceObject> spaceObject_;
115};
116
119AST_NAMESPACE_END
Unit L
定义 Unit.cpp:458
定义 LinkToObjectImpl.hpp:46
定义 SpaceObject.hpp:34
弱引用指针
定义 WeakPtr.hpp:35
errc_t aWideToUtf8(const wchar_t *wide, std::string &utf8)
将宽字符编码的字符串转换为UTF-8编码
定义 Encode.cpp:219
errc_t aUtf8ToWide(const char *utf8, std::wstring &wide)
将UTF-8编码的字符串转换为宽字符编码
定义 Encode.cpp:200
定义 AstCOM.idl:27
IObject * aComGetObject(Object *obj)
获取对象的COM接口
定义 COMAPI.cpp:32
void aSpaceObject_SetReferenceVehicle(SpaceObject *spaceObject, SpaceObject *referenceVehicle)
设置参考航天器
定义 SpaceObject.cpp:50
SpaceObject * aSpaceObject_GetReferenceVehicle(SpaceObject *spaceObject)
获取参考航天器
定义 SpaceObject.cpp:41