我尝试做的是将在服务器端创建的对象传输到客户端。当我在服务器端和客户端使用c++时,我已经让它工作得很好,但我不能让我的服务器在其他语言如.Net上正常工作,它可能不喜欢指针!
这个Serversidecode看起来正确吗?
服务器表单:.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;
}发布于 2010-02-07 13:49:29
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);
}发布于 2010-02-04 21:44:29
您的GetMyObject()方法错误,它返回一个指向局部变量的指针。这只会在偶然的情况下起作用,对于任何包装COM的语言都不会起作用。修复(减去错误处理):
DummyComObj *myDum = Form2->Getformdummy();
return myDum->QueryInterface(__uuidof(IDummyComObj), outObj);不确定__uuidof()在生成器中是否可用,请使用您能获得的任何东西来获取接口的IID。
https://stackoverflow.com/questions/2199951
复制相似问题