如何在dll中使用到cmscomm????大虾指教! 我现在在做的一个是需要在dll中使用到cmscomm,而cmscomm控件需要有dialog才能生存。请问各位大虾有无这方面经验! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 从CWnd继承一个类,在里面加入cmscomm控件,及操作代码,要在dll里面生成这个类的实例就可以了。我以前做过,好像是这么做的 那么 怎么把cmscomm控件拖放到这个类里面呢?普通的cmscomm可都是放在一个dialog面板里的呀!还有我已经在调用这个dll的mfc 项目程序里使用了cmscomm控件,这个cmscomm和在dll里面的那个有影响吗????谢谢! 应该没有影响。具体做法你参考一下VC技术内幕第四版里的有关AtiveX的用法或者你新建一个dialog然后放一个cmscomm控件,然后查看那个dialog类的代码,把classwizard自动添加的代码复制到你的类里面就OK了 在我的dll里,我继承cdialog建立一个cxx类,然后在cxx里面放置了cmscomm控件.在cxx.h里定义了 CMSComm m_ctrlComm; 在CTR_DLL.cpp里面使用到m_ctrlComm.SetOutput(COleVariant(array));cxx.cpp:__________________________________________________CXx::CXx(CWnd* pParent /*=NULL*/) : CDialog(CXx::IDD, pParent){ //{{AFX_DATA_INIT(CXx) //}}AFX_DATA_INIT if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); //选择com1 if(!m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port"); m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); /////////参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0 m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据 m_ctrlComm.SetOutBufferCount(0); // Place all significant initialization in InitInstance}void CXx::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CXx) DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CXx, CDialog) //{{AFX_MSG_MAP(CXx) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAPEND_MESSAGE_MAP()但是程序一执行到m_ctrlComm.xxxxxx就出致命错。大虾救命啊!!!!!!!!!! 谢谢 !:-)[email protected] 怎么在C++语言编程方面成为一个高手 memset怎样初始化动态分配的内存 有关编译时连接静态连接库的问题? 网络回放 关于联众的游戏机制问题,谢谢 劳驾帮忙看一句话 谁搞过netmeeting 呀?帮帮忙! 如何用 ADSI 将用户加入 IIS Ftp 站点的管理员中? 高手请进! 中英文字串的长度?在线等候 VC中按钮只有单击双击事件,怎样实现VB中的鼠标DOWN Up 事件? 急!!!先行谢过! 语法问题,谢谢#pragma pack(1)什么意思
还有我已经在调用这个dll的mfc 项目程序里使用了cmscomm控件,这个cmscomm和在dll里面的那个有影响吗????
谢谢!
或者你新建一个dialog然后放一个cmscomm控件,然后查看那个dialog类的代码,把classwizard自动添加的代码复制到你的类里面就OK了
cxx.cpp:
__________________________________________________CXx::CXx(CWnd* pParent /*=NULL*/)
: CDialog(CXx::IDD, pParent)
{
//{{AFX_DATA_INIT(CXx)
//}}AFX_DATA_INIT
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort(1); //选择com1
if(!m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
/////////参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
m_ctrlComm.SetOutBufferCount(0);
// Place all significant initialization in InitInstance
}
void CXx::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CXx)
DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CXx, CDialog)
//{{AFX_MSG_MAP(CXx)
// NOTE: the ClassWizard will add message map macros here
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
但是程序一执行到m_ctrlComm.xxxxxx就出致命错。大虾救命啊!!!!!!!!!!
[email protected]