书上以及CSDN上好多文章说,对于ActiveX控件(MSCOMM是ActiveX控件啊!)
只要加上如下两句话即可:
         ::CoInitalize(NULL) 
         AfxEnableControlContainer();
可是偶试了N多次,还是错误
==========================================================================
oldworm(oldworm) 大虾回复如下: 
 
  用mscomm访问串口是可以的,但你首先必须建立一个ActiveX 对象,
  m_comm.Create(...);
  上面建立对象成功以后才能设置其它属性,如波特率、数据位、奇偶位等。
  建立Activex跟建立一个CButton一样。
==========================================================================
killme983(第二春)大虾就设置方法回复如下:    DWORD style=WS_VISIBLE|WS_CHILD;
    if (!m_Com.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL))
    {
          TRACE0("Failed to create OLE Communications Control\n");
  return -1; //fail to create  
    }    m_Com.SetCommPort(2); //选择COM1
    m_Com.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
    m_Com.SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes    if(!m_Com.GetPortOpen()) //打开串口   
    m_Com.SetPortOpen(TRUE);
    m_Com.SetInputMode(1); //设置输入方式为二进制方式
    m_Com.SetSettings("9600,n,8,1"); //设置波特率等参数
    m_Com.SetRThreshold(1); //为1表示有一个字符引发一个事件    
    m_Com.SetInputLen(0);    这就是利用MSComm控件初始化串口的全过程!
==========================================================================
    偶回去后马上就试,还是没有成功(偶的确够笨的,但实在不甘心就此放弃),
偶感觉原因是没有正确建立mscomm对象,可能是killme983(第二春)大虾的这段代码,偶没有添加在正确的函数中因此想就此问题向诸位大虾请教情况简单描述如下:    偶做的DLL基于常规MFC,并且有一个模式对话框,将mscomm添加到该对话框模板上(与在MEC应用程序中添加mscomm的方法一样操作)然后在theApp类的构造函数theApp::theApp() (在初始化函数theApp::Initiate()中也试过)添加了上面所说的两句话,然后再做了程序调用该DLL,结果程序运行与MSCOMM相关操作时候发生ASSERT异常,查找相关源文件WINOCC.CPP为not OLE控件错误
   查找mscomm的Create函数,如下
    BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE,
BSTR bstrLicKey = NULL)可以知道mscomm是由CWnd* pParentWnd指针指向的窗口对象建立,而模式对话框无论DoModal()==IDOK或IDCANCER以后,该指针均释放为空,由此导致ASSERT异常。(还不知道原因分析是否准确,请指教)因此偶想请问:该mscomm控件应该如何产生,即该Create在何处调用(偶想mscomm控件应该通过调用DLL中theApp对象的方法来建立,然而theApp不是派生自CWnd对象)其实偶知道只要用API函数即可解决偶DLL的问题,但是偶是一名初学者,希望能搞清楚ActiveX、DLL等基本概念,所以偶GGYY地说了一大堆,希望诸位过来人帮助偶,谢谢!问题有点长,也不知道说清楚了没有,还望各位大虾出手相助,感激不尽-----100分双手奉上!