Time of Update: 2018-12-08
前言:本文書寫的格式與其它不相同。本文題目說是關於C++ API的思考,其實也不僅僅是C++,對於其它語言同樣適用。API實際是指Application Programming
Time of Update: 2018-12-08
C++由於標頭檔重複包含了所定義的變數或者常量,編譯器就會報重複定義的錯誤。如果你碰見這樣的問題可以考慮重下面幾個方面去解決: 1、在出現重定義錯誤的標頭檔加上:#ifndef FileName_H_#define FileName_H_ ....(標頭檔內容)#endif注意如果FileName_H_這個名字已經被使用,將會出現未定義問題(這裡不討論),這是你保證FileName_H_唯一就可以。2、在出現重定義錯誤的標頭檔加上這一句:#pragma once
Time of Update: 2018-12-08
C++的四種強制類型轉換,所以C++不是型別安全的。分別為:static_cast , dynamic_cast , const_cast ,
Time of Update: 2018-12-08
@echo off title=HYTradingGateway自動化編譯打包工具mode con cols=80 lines=40echo -------------------------------------------------------------echo 使用說明echo. echo HYTradingGateway自動化編譯打包工具、修改echo
Time of Update: 2018-12-08
在實際計算中可能會出現浮點型的無效資料,格式化輸出到檔案中內容為1.79769e+308,輸出到介面就是很大一串資料。這兩種方式無論哪種在閱讀和尋找時就不是很方便。無效值定義如下:#define InvalidDouble *(double*)("\xff\xff\xff\xff\xff\xff\xef\x7f")double price;.........(計算步驟省掉)price=GetPrice();
Time of Update: 2018-12-08
c++中提供了四種新的強制轉換分別是:const_cast、dynamic_cast、reinterpret_cast、static_cast.這四種轉換類型,每一種都適用於特定的目的:const_cast 一般用於強製取消對象的常量性。它是唯一能夠做到這一點的C++風格的強制轉型。dynamic_cast 主要用於執行"安全向下轉型",也就是說,要確定一個對象是否是一個繼承體系中的一個特定類型。它是唯一不能用舊風格文法執行強制轉型。reinterpret_cast
Time of Update: 2018-12-08
不同目錄下的多個二進位執行檔案的批處理代碼 @echo offpushd "G:\apache-activemq-5.5.0-bin\apache-activemq-5.5.0\bin\"start /min "" G:\apache-activemq-5.5.0-bin\apache-activemq-5.5.0\bin\activemq.batpopdping 127.0.0.1 -n 5 pushd "G:\backup2011-10-31\exchangePlatform\bin"
Time of Update: 2018-12-08
一、什麼是位元組對齊電腦中記憶體空間都是按照byte劃分的,從理論上講似乎對任何類型的變數的訪問可以從任何地址開始,但實際情況是在訪問特定類型變數的時候經常在特定的記憶體位址訪問,這就需要各種類型資料按照一定的規則在空間上排列,而不是順序的一個接一個的排放,這就是對齊。二、對齊的作用和原因:1、平台原因(移植原因):不是所有的硬體平台都能訪問任意地址上的任意資料的;某些硬體平台只能在某些地址處取某些特定類型的資料,否則拋出硬體異常。各個硬體平台對儲存空間的處理上有很大的不同。一些平台對某些特定類
Time of Update: 2018-12-08
在系統開發過程中出現的bug相對而言是比較好解決的,花費在這個上面的調試代價不是很大,但是在系統整合後的bug往往是難以定位的bug(最好方式是打樁,通過打樁可以初步鎖定出錯的位置,如:進入函數前列印日誌,離開時再次列印日誌)。而這些難以定位的bug基本分為2類:記憶體錯誤和並非問題。
Time of Update: 2018-12-08
指向結構體類型變數的使用首先讓我們定義結構體:struct stu{char name[20];long number;float score[4];} ;再定義指向結構體類型變數的指標變數:struct stu *p1, *p2 ;定義指標變數p 1、p 2,分別指向結構體類型變數。引用形式為:指標變數→成員;[例7-2] 對指向結構體類型變數的正確使用。輸入一個結構體類型變數的成員,並輸出。複製代碼 代碼如下:#include <stdlib.h> /*使用m a l l o
Time of Update: 2018-12-08
這幾天工作時碰到一個C++的編譯錯誤(我使用的是Visual C++ 7.0),說是有一個類重複定義,仔細想想我們的這個項目也是做了好幾個Release了, 內部代碼應該不會有這樣的低級錯誤, 真把類型給重複定義了,檢查結果正如我預料的一樣。 就這樣, 我左右沒找到原因,被一個編譯錯誤給卡在那裡了。(在我的概念中, 程式錯誤的等級為:編譯錯誤->連結錯誤->邏輯錯誤, 此錯誤屬於最低級 )。這時我仔細看了一下錯誤提示,
Time of Update: 2018-12-08
在編寫代碼做測試時發現兩個大數相乘結果不正確的問題,測試代碼如下: #include "stdafx.h"#include<stdlib.h>#include<time.h>int _tmain(int argc, _TCHAR* argv[]){ time_t temp1=1345172428000000; time_t temp2=1345172428*1000000; ::system("pause"); return
Time of Update: 2018-12-08
這個應該是一個MFC程式,ON_MESSAGE是添加訊息響應函數,這句話就是添加熱鍵WM_HOTKEY的響應函數。當你註冊了熱鍵之後,當使用者按下熱鍵,會執行OnHotKey函數來處理這個訊息。錯誤就應該是OnHotKey這個函數的聲明錯誤了,傳回值應該是LRESULT. VS2008對訊息的檢查更為嚴格,以前在VC6下完全正常啟動並執行訊息映射在VS2008下編譯不通過ON_MESSAGE(WM_message,OnMyMessage);OnMessage傳回值必須為LRESULT,其形式為:
Time of Update: 2018-12-08
C#開發Windows應用程式中經常需要去控制系統的音量,分兩種方式:1.使用Win Api控制2.使用C++ dll控制Win Api控制: 使用user32.dll和winmm.dll都可以控制系統音量,區別是Win系統的版本。winmm.dll Xp環境下可用,user32.dll Vista及以上版本。C++ dll控制: CoreAudioApi 是C++ 第三方封裝了音量控制,網上下載DLL後再項目中引用即可使用。CoreAudioApi Vista及以上版本支援。下面給出代碼1
Time of Update: 2018-12-08
寫這個文章,主要是因為網上對C#字串和享元模式的誤解比較多。Flyweight模式先說這名字,fly呢,就是蒼蠅,沒錯這裡面不是飛的意思,是蒼蠅的意思,weight大家都知道,就是重量,蒼蠅的重量,就是非常非常輕的意思。所以Flyweight模式就是處理非常非常輕量級對象的一個東西。Flyweight的目標是解決大量細粒度對象的記憶體消耗問題,當然,巧婦難為無米之炊,任何模式和手法都不能憑空造出記憶體來,所以享元模式針對的情況是這些細粒度對象的中資料有重複的情況。Flyweight的做法是,把對
Time of Update: 2018-12-08
基本解釋 const是一個C語言的關鍵字,它限定一個變數不允許被改變。使用const在一定程度上可以提高程式的健壯性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程式也有一些協助。雖然這聽起來很簡單,但實際上,const的使用也是c語言中一個比較微妙的地方,微妙在何處呢?請看下面幾個問題。問題: const變數 & 常量為什麼我象下面的例子一樣用一個const變數來初始化數組,ANSI C的編譯器會報告一個錯誤呢?const int n = 5;int a[n]
Time of Update: 2018-12-08
C語言的位欄位是個比較有意思的特性。它的目的是在一個機器字中儲存多個對象(每個對象佔據若干bit),從而節省記憶體資源,同時又避免複雜的位元運算。在此不再討論位欄位的具體文法,下面將研究位欄位的儲存特性。 先說含有多個欄位(field)的字(word)所佔空間的規律——含有多個欄位的字的大小是所有欄位的類型中的最長的那個的倍數。但要確定究竟是最長類型的幾倍則比較複雜,這要看是否需要考慮類型對齊問題(即一個欄位能否跨越兩個最長類型)。 例1: struct word {char field1 :
Time of Update: 2018-12-08
當我在linux下寫c語言的時候經常會遇到段錯誤.所以就來細究一下. 段錯誤或段違規(segmentation violation)查看Expert C Programming(Peter Van Der Linden) Pg.156解釋到段錯誤是由於記憶體管理單元(MMU)的異常所致,而該異常則通常是由於解除引用一個未初始化或非法的指標引起.就是指標正在引用一個並不位於你的地址空間中的地址.書中的例子複製代碼 代碼如下:int *p = 0; *p = 17; 這裡顯然 地址0
Time of Update: 2018-12-08
一個代碼:複製代碼 代碼如下:#include<stdio.h>#include<stdlib.h>#define uchar unsigned char#define uint unsigned intvoid display(uchar *p);char h[4] = {'A','B','C','\0'};char e[4] = {'E','F','L','\0'};char l[4] = {'M','N','O','\0'};char o[4] = {'X','Y'
Time of Update: 2018-12-08
實現步驟:1.實現整個滑鼠框選的幾個事件(down、move、up),當滑鼠點下記錄滑鼠框選的起點,滑鼠抬起結束操作。2.以滑鼠框選過程中擷取的滑鼠座標為基點計算框選的矩形的4點座標,4點座標以順時針方向布點。3.通過Shape.Path類實現在類上畫出此矩形。代碼如下:複製代碼 代碼如下:namespace HostDemo { public class HostCanvas : Canvas { public HostCanvas() { InitializeComponent();