大家不要笑我了,我不喜欢用那个人家写的串口类。
所以导出了MSCOMM32.OCX的类,然后在此基础上写了一个串口打印机的小工具类。
—————————————声明———————————————
本文原创,转载请保持文章的完整性(包括本声明),并显要的注明作者以及出处。
本文链接:http://blog.csdn.net/wlsgzl/article/details/41350357
===================================================
CPrinterGP3120TN m_Printer;
BOOL bRes; bRes=m_Printer.Create(NULL,0,CRect(0,0,1,1),this,IDC_MSCOMM_PRINTER); if (bRes==FALSE) { AfxMessageBox(TEXT("创建打印机控件失败,请退出重试。"),MB_OK|MB_ICONERROR); ExitProcess(-1); }一切都是好好的,在具有VC2010开发环境中。
======http://blog.csdn.net/wlsgzl/article/details/41350357======
当我在测试机环境上运行时,发现无法创建控件,创建控件失败。
于是在if中添加了输出,发现返回0。
===================================================
进入开发环境,跟踪变量发现Create是成功的。
所以很难理解这到底是为什么。
-----------------------------------------------------------------------------------------
抱着试试看的态度,做了下列的更改:
添加了这个
void CXXXDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_MSCOMM_PRINTER, m_Printer);//<---This line. }删掉了这些
//BOOL bRes; //bRes=m_Printer.Create(NULL,0,CRect(0,0,1,1),this,IDC_MSCOMM_PRINTER); //if (bRes==FALSE) //{ // AfxMessageBox(TEXT("创建打印机控件失败,请退出重试。"),MB_OK|MB_ICONERROR); // ExitProcess(-1); //}这相当于通过向导工具添加了一个控件变量。
——————————————————————————————
终于客户机运行成功。
那么问题来了,是什么导致了先前的测试环境的失败?
20141123:
原来是许可的问题,解决方法见http://support.microsoft.com/kb/315501/zh-cn
下面是部分内容的截取:
本文介绍如何在 Microsoft Visual C++ MFC 程序中为 MsComm32 控件提供运行时许可证数据。Visual C++ 附带的自定义控件 MsComm32.ocx 是经过授权的控件。在安装 Visual Studio 6.0 时,在安装该控件的同时会安装一个设计时许可证。对于非开发人员的计算机,则需要运行时许可证。
/* Copyright (c) 1994 */ WCHAR pwchLicenseKey[] = { 0x0043, 0x006F, 0x0070, 0x0079, 0x0072, 0x0069, 0x0067, 0x0068, 0x0074, 0x0020, 0x0028, 0x0063, 0x0029, 0x0020, 0x0031, 0x0039, 0x0039, 0x0034, 0x0020 };
#include "CMSComm.h"
/* Copyright (c) 1994 */ WCHAR pwchLicenseKey[] = { 0x0043, 0x006F, 0x0070, 0x0079, 0x0072, 0x0069, 0x0067, 0x0068, 0x0074, 0x0020, 0x0028, 0x0063, 0x0029, 0x0020, 0x0031, 0x0039, 0x0039, 0x0034, 0x0020 };
// Create the license string BSTR bStrLicense = ::SysAllocStringLen(pwchLicenseKey, sizeof(pwchLicenseKey)/sizeof(WCHAR)); // Create the CMSComm object with run-time license data CMSComm * pComm = new CMSComm; pComm->Create(NULL, WS_VISIBLE, CRect(0,0,0,0), this, 999, NULL, FALSE, bStrLicense); // Release the memory for license string ::SysFreeString(bStrLicense); // Display a success or failure message to the user ::MessageBox(NULL, (pComm->m_hWnd ? "Created OK" : "Not created"), "Debug", MB_OK);
==========================================================
那么问题又来了,为什么会打雷下雨,为什么有冬天夏天?
哦不,是
为什么通过向导添加变量不需要许可,自己create就需要呢?