上次偶就怎样在DLL中使用串口控件MSCOMM请教诸位大虾, masterz() 大虾给予偶答复如下(深表感谢)问题以及回答如下
==========================================================================
==========================================================================
诸位大虾,偶想偷个懒,不用API函数,而直接用串口ActiveX控件MSCOMM在动态库中封装串口函数,请大家教个窍门,THANKS!---100分双手奉上 回复人: masterz() ( ) 信誉:96 2002-09-17 21:04:00 得分:0
use #import directive, here is codesnippet on winsock 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);
============================================================
============================================================但是偶就是看不明白(希望masterz() 大虾不要吐血)
偶实在有点不明白:书上以及CSDN上好多文章说,对于ActiveX控件(MSCOMM是ActiveX控件啊!)只要加上如下两句话即可:
::CoInitalize(NULL)
AfxEnableControlContainer();
可是偶试了N多次,还是错误
情况简单描述如下:
偶做的DLL基于常规MFC,偶在theApp类的构造函数theApp::theApp()和初始化函数theApp::Initiate()分别添加了上面所说的两句话,然后再做了程序调用该DLL,结果程序运行与MSCOMM相关操作时候发生ASSERT异常,
ASSERT异常为表明为WINOCC。CPP中错误,查找相关源文件为not OLE控件错误其实偶知道只要用API函数即可解决偶DLL的问题,但是偶是一名初学者,希望能搞清楚ActiveX、DLL等基本概念,所以偶GGYY地说了一大堆,希望诸位过来人帮助偶,谢谢!问题有点长,也不知道说清楚了没有,还望各位大虾出手相助,感激不尽!
==========================================================================
==========================================================================
诸位大虾,偶想偷个懒,不用API函数,而直接用串口ActiveX控件MSCOMM在动态库中封装串口函数,请大家教个窍门,THANKS!---100分双手奉上 回复人: masterz() ( ) 信誉:96 2002-09-17 21:04:00 得分:0
use #import directive, here is codesnippet on winsock 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);
============================================================
============================================================但是偶就是看不明白(希望masterz() 大虾不要吐血)
偶实在有点不明白:书上以及CSDN上好多文章说,对于ActiveX控件(MSCOMM是ActiveX控件啊!)只要加上如下两句话即可:
::CoInitalize(NULL)
AfxEnableControlContainer();
可是偶试了N多次,还是错误
情况简单描述如下:
偶做的DLL基于常规MFC,偶在theApp类的构造函数theApp::theApp()和初始化函数theApp::Initiate()分别添加了上面所说的两句话,然后再做了程序调用该DLL,结果程序运行与MSCOMM相关操作时候发生ASSERT异常,
ASSERT异常为表明为WINOCC。CPP中错误,查找相关源文件为not OLE控件错误其实偶知道只要用API函数即可解决偶DLL的问题,但是偶是一名初学者,希望能搞清楚ActiveX、DLL等基本概念,所以偶GGYY地说了一大堆,希望诸位过来人帮助偶,谢谢!问题有点长,也不知道说清楚了没有,还望各位大虾出手相助,感激不尽!
用mscomm访问串口是可以的,但你首先必须建立一个ActiveX 对象,
m_comm.Create(...);
上面建立对象成功以后才能设置其它属性,如波特率、数据位、奇偶位等。
建立Activex跟建立一个CButton一样。