add ATL support to your MFC project http://www.codeguru.com/atl/mfcatl.shtml then you create mscomm control by ATL, refer to the following technic of creating mswinsck.ocx control #import "c:\winnt\system32\mswinsck.ocx" no_namespace ... IMSWinsockControlPtr pWinsock; _bstr_t pstr("mswinsock.winsock"); CLSID clsidwinsock; CLSIDFromProgID(pstr,&clsidwinsock); pWinsock.CreateInstance(clsidwinsock); if(pWinsock) { pWinsock->RemotePort=13; pWinsock->RemoteHost=_bstr_t("time-a.nist.gov"); _variant_t varoptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR); HRESULT hr= pWinsock->Connect(); if(FAILED(hr)) MessageBox(NULL,"failed","failed",MB_OK); ......pWinsock->Close(); } else MessageBox(NULL,"can not create winsock","error",MB_OK);
http://www.codeguru.com/atl/mfcatl.shtml
then you create mscomm control by ATL, refer to the following technic of creating mswinsck.ocx control
#import "c:\winnt\system32\mswinsck.ocx" no_namespace
...
IMSWinsockControlPtr pWinsock;
_bstr_t pstr("mswinsock.winsock");
CLSID clsidwinsock;
CLSIDFromProgID(pstr,&clsidwinsock);
pWinsock.CreateInstance(clsidwinsock);
if(pWinsock)
{
pWinsock->RemotePort=13;
pWinsock->RemoteHost=_bstr_t("time-a.nist.gov");
_variant_t varoptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
HRESULT hr= pWinsock->Connect();
if(FAILED(hr))
MessageBox(NULL,"failed","failed",MB_OK);
......pWinsock->Close();
}
else
MessageBox(NULL,"can not create winsock","error",MB_OK);
我使用一个gis功能的activex,我要做一个空间聚类,要用那个activex的一些东西,我想把这个聚类的东西也作为一个activex发布,不管包含还是聚合都可以了,我在我的那个activex中创建那个gis控件时总是非法操作,看了看是好像是容器的问题,也不清楚了
你那个问题看看能不能解决
strControlProgid,
"",
WS_VISIBLE,
rc,
this,
IDC_MSCOMM1,
NULL,
FALSE,
NULL);
来创建activex控件,其中strControlProgid为该控件的Progid,要处理该控件的消息,象在对话框中一样,在头文件中添加DECLARE_EVENTSINK_MAP()宏定义,在实现文件中添加
BEGIN_EVENTSINK_MAP(CMASCCtrl, COleControl)
//{{AFX_EVENTSINK_MAP(CMascdriverDlg)
ON_EVENT(CMASCCtrl, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
即可,OnComm即是你的消息处理函数。