手動注冊:
大家知道,當我們安裝VC++6.0/VB6.0時,如果選擇了ACtiveX控件項(自定義安裝),MSComm控件就會自動安裝在計算機上了,并在系統文件夾下多了3個文件:Mscomm.srg, Mscomm32.ocx,Mscomm32.dep
注意,操作系統不同,則系統文件夾不同:
Win98: windows/system
Win2000: winnt/system32
那么用了MSComm控件的程序在發布時或者在VS2008開發環境下如何來注冊MSComm控件呢?發布程序時可以用安裝程序,我們這里不介紹,只談談如何手工來注冊安裝MSComm控件。
第一步:將Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三個文件復制到系統文件夾中。要注意的是,MSComm控件是要授權的,所以必須將其使用“執照”Licence 在注冊表中登記注冊,下一步就是注冊方法。至于為什么要這樣做,可以看看下面的網頁:http://support.microsoft.com/support/kb/articles/q151/7/71.asp
第二步:用Windows下的注冊工具regsvr32注冊該OCX控件,點擊“開始”->"運行",再在中填入(假設操作安裝在C盤,WIN2000):
Regsvr32 C:\winnt\system32\Mscomm32.ocx
第三步:在注冊表中手工新建一個主鍵項:先在點擊“開始”->"運行",再在中填入regedit命令打開注冊表,找到HKEY_CLASSES_ROOT\Licenses,在其中添加主鍵
4250E830-6AC2-11cf-8ADB-00AA00C00905 并將內容設置為:
kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
(注:這項內容也可以用記事本程序打開Mscomm.srg文件看到)
在VC(包括VC.NET)中應用,我已經介紹多次了,這里再說說在Delphi中的應用:進入Delphi環境中,選擇菜單命令:Component->Import ActiveX Control,在列表中可以看到Microsoft Comm Control,version 6.0, 選中后點擊Install按鈕,就完成安裝。在ActiveX控件頁上可以看到MSComm控件的電話圖標。
以上轉自:http://www.gjwtech.com/scomm/manaualregistermscomm.htm
自動注冊:
運行附件中的“注冊.cmd”完成自動注冊 MSComm控件。 MSComm
posted @
2013-03-20 10:23 王海光 閱讀(1823) |
評論 (0) |
編輯 收藏
1、安裝mysql-5.0.22-win32,mysql-connector-odbc-5.1.12-win32.msi 然后:開始菜單->設置->控制面板->管理工具->數據源(ODBC)->系統DSN->添加->選擇MySQL ODBC 5.1 Driver
2、首先導入ADO類型庫,您的環境中msado15.dll不一定在這個目錄下,請按實際情況修改。或者把msado15.dll這個文件拷貝到你的工程目錄下,直接#import "msado15.dll" \ no_namespace \rename ("EOF", "adoEOF")包含進來。
在stdafx.h加入如下代碼:
#include <afxdb.h> // MFC Automation classes
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
3、代碼示例:
.h文件:
/************************************************************************
*Copyright:
*FileName:ADOConn.h
*
*Author:wanghaiguang
*Date:2013-03-07
*Description:ADO Operate MySql DataBase
************************************************************************/
#pragma once
class CADOConn
{
public:
CADOConn(void);
~CADOConn(void);
public:
//添加一個指向Connection對象的指針:
_ConnectionPtr m_pConnection;
//添加一個指向Recordset對象的指針:
_RecordsetPtr m_pRecordset;
// 定義方法
public:
// 初始化—連接數據庫
void OnInitADOConn();
// 執行查詢
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
// 執行SQL語句,Insert Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
.cpp文件:
#include "StdAfx.h"
#include "ADOConn.h"
CADOConn::CADOConn(void)
{
}
CADOConn::~CADOConn(void)
{
}
/************************************************************************
*Function : OnInitADOConn
*Description: Init DataBase Connect
*param : bconString[in] ()
*return : void
************************************************************************/
void CADOConn::OnInitADOConn()
{
// 初始化OLE/COM庫環境
::CoInitialize(NULL);
HRESULT hr;
try
{
// 創建Connection對象,可以通過配置文件獲取連接信息
hr = m_pConnection.CreateInstance("ADODB.Connection");
if(SUCCEEDED(hr))
{
m_pConnection->ConnectionTimeout=600;//設置連接超時時間
m_pConnection->CommandTimeout=120;//設置執行命令超時時間
m_pConnection->Open("DSN=MySqlTest;Server= localhost;Database=school","root","sa",adModeUnknown);
}
}
// 捕捉異常
catch(_com_error e)
{
// 顯示錯誤信息
AfxMessageBox(e.Description());
}
}
/************************************************************************
*Function : GetRecordSet
*Description: Select Data
*param : bstrSQL[in] SQL
*return : _RecordsetPtr
************************************************************************/
_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 連接數據庫,如果Connection對象為空,則重新連接數據庫
if(m_pConnection==NULL)
OnInitADOConn();
// 創建記錄集對象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的記錄
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉異常
catch(_com_error e)
{
// 顯示錯誤信息
AfxMessageBox(e.Description());
}
// 返回記錄集
return m_pRecordset;
}
/************************************************************************
*Function : ExecuteSQL
*Description: Exec SQL For Insert Update _variant_t
*param : bstrSQL[in] SQL
*return : BOOL
************************************************************************/
BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
// _variant_t RecordsAffected;
try
{
// 是否已經連接數據庫
if(m_pConnection == NULL)
OnInitADOConn();
// Connection對象的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 參數RecordsAffected是操作完成后所影響的行數,
// 參數Options表示CommandText的類型:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存儲過程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}
/************************************************************************
*Function : ExitConnect
*Description: Exit Connect DataBase
*param :
*return : void
************************************************************************/
void CADOConn::ExitConnect()
{
// 關閉記錄集和連接
if (m_pRecordset != NULL)
{
m_pRecordset->Close();
//m_pRecordset->Release();
}
m_pConnection->Close();
//m_pConnection->Release();
// 釋放環境
::CoUninitialize();
}
其他連接數據庫:
BOOL ConnectMySqlFun1()
{
CoInitialize(NULL); //初始化Com組件
conPtr.CreateInstance(__uuidof(Connection)); //Connection用于與數據庫服務器的鏈接另一種方式
/******************連接數據庫********************/
try
{
// MySqlTest為數據源名 localhost表示本地 root表示用戶名 sa表示密碼
conPtr->Open("DSN=MySqlTest;server=localhost;database=school;","root","sa",adModeUnknown);///連接MySql數據庫(測試成功)
}
catch(_com_error e) //捕捉異常
{
printf("Connect Error : %s", e.Description());
return FALSE;
}
return TRUE;
}
BOOL ConnectMySqlFun2()
{
CoInitialize(NULL); //初始化Com組件
try
{
//創建連接對象實例
conPtr.CreateInstance("ADODB.Connection");
//設置連接字符串
//mdb------------------------------------------------
CString strConnect="DSN=MySqlTest";
//使用Open方法連接數據庫
conPtr->Open((_bstr_t)strConnect,"root","sa",adModeUnknown);
}
catch(_com_error e)
{
printf("Connect Error : %s", e.Description());
return FALSE;
}
return TRUE;
}
操作MySql數據庫:
CADOConn m_ADO;
m_ADO.OnInitADOConn();
//設置SELECT語句
_bstr_t vSQL, vInserSQL;
vSQL = "select name from teacher";
//設置INSERT語句
vInserSQL = "insert into teacher values(27, 'hai', '哈爾濱六中', '1998-05-05')";
///執行INSERT語句
if (m_ADO.ExecuteSQL(vInserSQL))
{
printf("Insert Data Successful!!!");
}
//執行SELETE語句
_RecordsetPtr m_pRecordset;
m_pRecordset = m_ADO.GetRecordSet(vSQL);
CString name0;
//返回各列的值
while (!m_pRecordset->adoEOF)
{
name0 = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("name");
//CString name=(CString)recordPtr->GetCollect(_variant_t("name")).bstrVal;
//int no=recordPtr->GetCollect(_variant_t("stuno")).intVal;
printf("name : %s\n", name0);
m_pRecordset->MoveNext();
}
//斷開與數據庫的連接
m_ADO.ExitConnect();
參考鏈接:http://www.shnenglu.com/current/archive/2009/07/24/91069.html
posted @
2013-03-07 15:30 王海光 閱讀(4894) |
評論 (0) |
編輯 收藏
方法1:
In the Options go into Projects and Solutions -> VC++ Directories page and place this rows:
$(SystemRoot)\System32
$(SystemRoot)
$(SystemRoot)\System32\wbem
適用VC8的各種工程項目(包括移動設備的項目),如果在加了以后還出現這樣的錯誤提示,將上面的三句刪除掉,重新加一次就可以。
方法2:在Visual Studio中,選擇工具->選項->工程和解決方案->VC++目錄 點擊上方的像文件夾的按鈕-新建行,然后在空白處添加cmd.exe所在的目錄C:\Windows\System32\ (如果你是默認裝在C盤的話)點擊確定,就OK了。 In VS, go to tools>options>projects and solutions>VC++ Directories click the little folder button (new line) then in the new line that appears put:
本文轉自:http://www.shnenglu.com/zhangyq/archive/2009/02/16/73940.html
posted @
2013-03-07 10:49 王海光 閱讀(1102) |
評論 (1) |
編輯 收藏
代碼下載:
Socket編程示例_異步
Socket編程示例_同步
posted @
2013-03-01 16:10 王海光 閱讀(916) |
評論 (0) |
編輯 收藏
代碼示例:
#include <Sensapi.h>
#pragma comment(lib, "Sensapi.lib")
BOOL CheckNetIsOK(
const CString sUpdateIP)
{
//Judge Network is Connected
int nCount = 1;
do {
DWORD dw;
if( IsNetworkAlive(&dw))
{
break;
}
else {
Sleep(10000);
CString sNetWorkConnect;
sNetWorkConnect.Format("第%d次網絡未成功連接, 10秒后重試", nCount);
m_recvCtrl.SetWindowText(sNetWorkConnect);
nCount++ ;
}
}
while (nCount <4);
if (nCount == 4)
{
m_recvCtrl.SetWindowText("網絡連接失敗, 共檢測40秒");
return FALSE;
}
DWORD n = CCommonFun::WinExecAndWait32(_T("ping.exe"), sUpdateIP + " -n 2"
/*sCmdPara*/, NULL, 10000);
if (n == 0)
{
return TRUE;
}
else {
CString sNetWorkConnect;
sNetWorkConnect.Format("網絡連接正常, Ping:%s 失敗, 請檢測此IP對應的服務器是否正常工作", sUpdateIP);
m_recvCtrl.SetWindowText(sNetWorkConnect);
return FALSE;
}
}
posted @
2013-03-01 15:51 王海光 閱讀(7547) |
評論 (5) |
編輯 收藏
代碼示例:
int LineNum=m_recvCtrl.GetLineCount();
if(LineNum > 100) // 超過最大信息顯示行數
{
m_recvCtrl.SetSel(0, -1);
m_recvCtrl.Clear(); // 清空編輯框
}
CTime RevTime = CTime::GetCurrentTime();
CString Temp = RevTime.Format("[%Y/%m/%d %H:%M:%S]: ");
CString strEdit;
m_recvCtrl.GetWindowText(strEdit);
m_recvCtrl.SetSel(strEdit.GetLength(), strEdit.GetLength());
m_recvCtrl.ReplaceSel(Temp + sText + "\n");
posted @
2013-03-01 15:50 王海光 閱讀(2690) |
評論 (0) |
編輯 收藏
代碼示例:
CString GetPeerName_(SOCKET so)
{
struct sockaddr_in sa;
int len = sizeof(sa);
getpeername(so, (struct sockaddr *)&sa, &len);
return CString(inet_ntoa(sa.sin_addr));
}
posted @
2013-03-01 15:46 王海光 閱讀(2709) |
評論 (0) |
編輯 收藏
本文轉自:http://www.cnblogs.com/ggjucheng/archive/2012/11/02/2751119.html
posted @
2013-02-27 16:13 王海光 閱讀(390) |
評論 (0) |
編輯 收藏
本文轉自:http://www.cnblogs.com/ggjucheng/archive/2012/04/22/2465625.html
posted @
2013-02-27 16:09 王海光 閱讀(433) |
評論 (0) |
編輯 收藏
GDB 是GNU開源組織發布的一個強大的UNIX下的程序調試工具。或許,各位比較喜歡那種圖形界面方式的,像VC、BCB等IDE的調試,但如果你是在 UNIX平臺下做軟件,你會發現GDB這個調試工具有比VC、BCB的圖形化調試器更強大的功能。所謂“寸有所長,尺有所短”就是這個道理。 一般來說,GDB主要幫忙你完成下面四個方面的功能:
- 啟動你的程序,可以按照你的自定義的要求隨心所欲的運行程序。
- 可讓被調試的程序在你所指定的調置的斷點處停住。(斷點可以是條件表達式)
- 當程序被停住時,可以檢查此時你的程序中所發生的事。
- 動態的改變你程序的執行環境。
從上面看來,GDB和一般的調試工具沒有什么兩樣,基本上也是完成這些功能,不過在細節上,你會發現GDB這個調試工具的強大,大家可能比較習慣了圖形化的調試工具,但有時候,命令行的調試工具卻有著圖形化工具所不能完成的功能。讓我們一一看來。
gdb基本命令列表:

實例:
1 新建一個源文件vi swap.cc

源文件內容如下:
#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
int main()
{
int i,j;
cout<<endl<<"Input two int number:"<<endl;
cin>>i>>j;
cout<<"Before swap(),i="<<i<<" j="<<j<<endl;
swap(i,j);
cout<<"After swap(),i="<<i<<" j="<<j<<endl<<endl;
return 0;
}
直接復制粘貼生成源文件
2.生成可執行文件 g++ -g -o swap swap.cc,注意必須使用-g參數,編譯會加入調試信息,否則無法調試執行文件

3.啟動調試 gdb swap

3.1 查看源文件 list 1,回車重復上一次指令

3.2設置調試斷點 break 16,在第16行設置斷點,info break查看斷點信息(亦可使用縮寫i b )


3.3 調試 運行 輸入run 或者r

3.3 單步調試,step 或者 s進入函數內部

3.4查看變量 print b 或者 p b

3.5查看函數堆棧bt,退出函數finish

3.6 繼續運行直到下一個斷點或主函數結束continue或者c

3.7 退出調試 輸入q
本文轉自:http://blog.csdn.net/wfdtxz/article/details/7368357其他鏈接:http://blog.csdn.net/zzymusic/article/details/4815142 http://blog.sina.com.cn/s/blog_7dc317590101bouz.html
posted @
2013-02-27 15:38 王海光 閱讀(529) |
評論 (0) |
編輯 收藏