首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应返回ComObject的ComServer

应返回ComObject的ComServer
EN

Stack Overflow用户
提问于 2010-02-04 21:28:44
回答 2查看 145关注 0票数 0

我尝试做的是将在服务器端创建的对象传输到客户端。当我在服务器端和客户端使用c++时,我已经让它工作得很好,但我不能让我的服务器在其他语言如.Net上正常工作,它可能不喜欢指针!

这个Serversidecode看起来正确吗?

服务器表单:.h

代码语言:javascript
复制
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

代码语言:javascript
复制
__fastcall TForm2::TForm2(TComponent* Owner)
      : TForm(Owner)
{
      CoCreateInstance( CLSID_DummyComObj,NULL,CLSCTX_ALL,IID_IDummyComObj,(void**)&formDummy);
}

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

服务器TestComServerImpl:.cpp

代码语言:javascript
复制
STDMETHODIMP STDMETHODCALLTYPE TServerDidleComTestImpl::GetMyObject(IDummyComObj** outObj)
{
      DummyComObj *myDum = Form2->Getformdummy();
      *outObj = &myDum;
      return S_OK;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-07 13:49:29

TServerDidleComTestImpl::GetMyObject()无法编译,因为您试图将DummyComObj **赋值给DummyComObj*,但您也完全忽略了COM引用计数规则。

试着这样做:

服务器表单:.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
__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

代码语言:javascript
复制
STDMETHODIMP STDMETHODCALLTYPE 
TServerDidleComTestImpl::GetMyObject(IDummyComObj** outObj)
{
    return Form2->Getformdummy(outObj);
}
票数 1
EN

Stack Overflow用户

发布于 2010-02-04 21:44:29

您的GetMyObject()方法错误,它返回一个指向局部变量的指针。这只会在偶然的情况下起作用,对于任何包装COM的语言都不会起作用。修复(减去错误处理):

代码语言:javascript
复制
DummyComObj *myDum = Form2->Getformdummy();
return myDum->QueryInterface(__uuidof(IDummyComObj), outObj);

不确定__uuidof()在生成器中是否可用,请使用您能获得的任何东西来获取接口的IID。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2199951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档