请教COM问题!

fancy_zhh 2003-05-26 09:11:23
我做COM服务器的步骤如下:
1.新建一个工程
2.新建一个COM Object

问题:
1.如何让主线程(窗体)与组件进行通信
即在窗体中我如何调用组件中的方法,
在组件中又如何调用窗体中的控件
2.解释套间的概念
3.说一下组件线程模型的概念
...全文
22 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
fancy_zhh 2003-05-27
  • 打赏
  • 举报
回复
1.我想让这个COM组件带有一个事件,主动去触发客户端的一个事件的发生,是不是应该做成一个控件的形式.而我确实是这么做的
2.我所说的第一个问题是指同一个服务器端的事情
组件与窗体之间的通信问题
kingcaiyao 2003-05-26
  • 打赏
  • 举报
回复
将你新建的COM Object注册为服务器,在客户端你可以通过四种方法来调用COM接口中的方法,下面是详细的代码片段:
a.利用IDispatch接口
#include "**_TLB.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
IYourInterfaceDisp app;
app.BindDefault();
app.YourMethod(Parameter1,Parameter2,......,Paramtern);
app.Unbind();
}
b.利用自定义接口类:
#include "**_TLB.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TCOMIYourInterface app=CoYourInterface::Create();
app->YourMethod(Parameter1,Paramter2,..........,Parametern);
}
c.利用万能对象Variant
#include "utilcls.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Variant V=Variant::CreateObject("ProjectName.COMObjectName");
V.YourMethod(Paramter1,...........);
V=Unassigned;
}
d.利用接口本身
#include "utilcls.h"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
::CoInitialize(NULL);
IComTest *pobj;
::CoCreateInstance(CLSID_ComTest, NULL, CLSCTX_INPROC_SERVER, IID_IComTest, (void**)&pobj);
pobj->YourMethod(Paramter1,.....,Parametern);
pobj->Release();
::CoUninitialize();
}

2.关于你所说的套间,不知是否是socket
3.在VCL中,组件的线程模型有三种:Single,Apartment,Multi-thread
Single:每次只允许一个线程访问COM对象
Apartment:允许有多个线程访问COM对象,但是不能同时访问,必须进行排对.
Multi-Thread:允许有多个线程同时访问COM对象.
详细情况,你要找本书看看.

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧