gpt4 book ai didi

c++ - 应返回 ComObject 的 ComServer

转载 作者:行者123 更新时间:2023-11-28 03:58:29 25 4
gpt4 key购买 nike

我想做的是将在服务器端创建的对象传输到客户端。当我在服务器端和客户端使用 C++ 时,我已经让它工作得很好,但是我没有让我的服务器与其他语言(如 .Net)一起工作,它可能不喜欢这些指针!

这个服务器端代码看起来正确吗?

服务器表单:.h

class TForm2 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
private: // User declarations
DummyComObj* formDummy;
public: // User declarations
__fastcall TForm2(TComponent* Owner);
IDummyComObj* Getformdummy();
};

.cpp

__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
CoCreateInstance( CLSID_DummyComObj,NULL,CLSCTX_ALL,IID_IDummyComObj,(void**)&formDummy);
}

DummyComObj* TForm2::Getformdummy()
{
return formDummy;
}

服务器 TestComServerImpl:.cpp

STDMETHODIMP STDMETHODCALLTYPE TServerDidleComTestImpl::GetMyObject(IDummyComObj** outObj)
{
DummyComObj *myDum = Form2->Getformdummy();
*outObj = &myDum;
return S_OK;
}

最佳答案

除了 TServerDidleComTestImpl::GetMyObject() 由于您的原因没有编译试图将 DummyComObj ** 分配给 DummyComObj*,但你也是完全忽略 COM 引用计数规则。

试试这个:

服务器形式:.h

#include <utilcls.h>

class TForm2 : public TForm
{
__published: // IDE-managed Components
TMemo *Memo1;
private: // User declarations
TComInterface<IDummyComObj> formDummy;
public: // User declarations
__fastcall TForm2(TComponent* Owner);
void Getformdummy(IDummyComObj** outObj);
};

服务器形式:.cpp

__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
CoCreateInstance(
CLSID_DummyComObj,NULL,CLSCTX_ALL,IID_IDummyComObj,(void**)&formDummy);
}

HRESULT TForm2::Getformdummy(DummyComObj** outObj)
{
return formDummy->QueryInterface(IID_IDummyComObj,(void**)outObj);
}

服务器 TestComServerImpl: .cpp

STDMETHODIMP STDMETHODCALLTYPE 
TServerDidleComTestImpl::GetMyObject(IDummyComObj** outObj)
{
return Form2->Getformdummy(outObj);
}

关于c++ - 应返回 ComObject 的 ComServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2199951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com