我想要做的是将已经在服务器端创建的对象转移给客户端。当我在服务器端和客户端都使用C++时,我已经得到了它的正常工作,但是我没有让我的服务器正确地使用.Net等其他语言工作,它可能不喜欢指针!应该返回一个ComObject的ComServer
此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;
}
严格地说你应该检查QI()是否成功。如果它失败了,AddRef()还没有被调用,你必须在返回之前释放该对象(在C++中删除),否则该对象将被泄漏。 – sharptooth 2010-02-04 13:45:33
Hmya,我认为我的帖子中的“减少错误处理”规定不足以保留评论。从OP的片段看,正确的错误处理应该是什么样的,这完全不清楚。 – 2010-02-04 14:11:55
但是,当我尝试将这个typelib导入到.Net客户端时,GetMyObject的IDummyComObj ** outObj参数怎么办呢?它不能识别这个,也不会导入这个方法。 – Qwark 2010-02-04 15:14:40