CPP

wxWindows - wxPathList

CPP

検索するパスを追加して その中から探したりできる。 いいね。 wxPathList pathlist; pathlist.Add(_T(".")); pathlist.Add(_T("..")); pathlist.Add(_T("C:/Project")); wxString filename = pathlist.FindValidPath(_T("readme.txt")); if ( !filename ){ …

wxWindows - wxConfig(wxConfigBase)

CPP

wxWindowsには、プラットフォームに合わせて設定を保存する仕組を提供するwxConfigクラスが用意されています このクラスは32bit Windowsではレジストリを利用するwxRegConfig、 16bit Windowsではiniファイルを利用するwxIniConfig、 その他のプラットフォー…

起動パス/実行パスの取得方法

CPP

■WindowsAPI GetModuleFileName() ■wxWindiows wxGetCwd() を使います。

シリアル通信

CPP

VBでの解説だが、わかりやすかったので抜粋 SetCommState 関数 デバイス制御ブロック(DCB)構造体の指定により通信デバイスを構成し、シリアルポートの通信条件も設定する。 Declare Function SetCommState Lib "kernel32.dll" (ByVal hComm As Integer, By…

Template関数で実装をCppに書く方法(コンパイラ(リンカ)次第では不可)

CPP

■元の .h template class CHoge { ... public: T& get(int n) { //(*1) ..... (get処理) } ..... }; のメンバ関数 get() を .cpp に移動して T& get(int n); //(*1) .h -- 宣言のみに ■.cpp 内(主用部のみ) template T& CHoge::get(int n) { ..... (get処…

GCC で依存関係の出力

CPP

ヘッダファイルなどの依存関係はGCCで出力できる。 いちいちmakefileで依存関係を書かなくてもよくできるのでいい感じ。 mcpからmakefile出力させる手間も省けてよい。当然GCCをインストールしてないと使えないので、 みんなに配るときは要注意となるなぁ。 …

オブジェクト プーリング

CPP

オブジェクトがアクティブになると、そのオブジェクトがプールから取り出されます。オブジェクトが非アクティブになると、オブジェクトはプールに返却され、次の要求を待ちます。 ってな感じ。 こういう名前がついてたんだなぁ。

高速なmemset()/memcpy()のソース

CPP

snesのソースに書いてあったらしい。 なんかに使えるやろ。 # define op_t unsigned long int # define OPSIZ (sizeof(op_t)) void *memset(void *buf, int ch, size_t n) { int i; if (n == 0) return buf; if ( ch ){ for ( i = 0; i = 8 ){ size_t xlen; …

dlmalloc

CPP

メモリをタイトに管理したい場合に役立つのが, Doug Lea 氏の malloc ルーチン。 dlmallocというらしい。以下パクリ この malloc ルーチン(通称 "dlmalloc")は,ごく一般的な用途を想定して最適化されたものだ。これと言って特徴のあるものでも無いのだけ…

wprintf()で日本語が表示できない問題対策

CPP

VC++6: setlocale( LC_ALL, "Japanese" ); MinGW: setlocale( LC_ALL, "ja_JP.UTF-8" ); or setlocale( LC_ALL, "Japanese_Japan.932" ); を呼ぶ。 ちなみにMinGWの日本語版(gcc version 3.4.2)では wstring wsWahaha = L"\r\nフォーマットされていない\r\n…

簡単なキーの取り方

CPP

#include <conio.h> int main(int argc, char* argv[]) { while( 1 ){ if( _kbhit() != 0 ){ printf("getch() = %x\r\n",getch()); } } }

volatileとは

CPP

最適化を抑止する。 あまり参考書には出てこないが組み込みではよく使う宣言らしい。必要な処理をコンパイラが最適化して消してしまわないようにするのが目的。ex) volatile ULONG i; for(i = 0 ; i

MFCでのプログラムTips

CPP

リソースエディタで作ったダイアログ出す CDialog *pDlg; pDlg = new CDialog( IDD_ABOUTBOX ); pDlg->DoModal(); delete pDlg; 描画する xxxView::OnDraw(CDC* pDC) 関数ができるので このpDCを使用して描画する。 BeginPaint()/EndPaint()は必要なしなので…

STLTips

CPP

C4786 (デバッグ情報で使われる識別子が長すぎる)封じ #pragma warning (disable: 4786) 大文字小文字変換 #include using namespace std; @brief 大文字->小文字 @param c 半角英字 @return 小文字 inline char lower_ch( const char c ) { return static_c…

VCTips

CPP

自ウィンドウのハンドル this->m_hWnd ラジオボタン、チェックボタンにチェックON/OFFする CheckDlgButton() ダイアログにメニュー追加 こんなん?いまいち不安だったりするが CMenu oMenu; oMenu.LoadMenu( IDR_MENU_MAIN ); this->SetMenu( &oMenu ); ダイ…

unicodeを扱う

CPP

Unicode は、通常 2 バイトの識別子(0xFFFE または 0xFEFF)で開始し、アプリケーションはこれを使用してそのファイルが Unicode を使用していることを判断します。 0xFFFEには Unicodeバイト順序反転バイト順序マーク(順序反転 BOM) という意味がある 文…

配列の数を取得するマクロ

CPP

ex) #define mNUMBER_OF(A) (sizeof(A)/sizeof(A[0])) foo(){ long num[] = {0,10,100,1000}; for( int i=0;i

関数内部に関数を定義する方法

Cpp

以下の通り // 関数内関数イディオム void inner_function_idiom() { struct local { static void square(int x) { std::cout vecint; vecint vi; vi.push_back(1); vi.push_back(2); std::for_each(vi.begin(), vi.end(), local::square); }

printf()みたいな引数の受け取り方

CPP

こんな感じで inline void vPrintf(const char* format, ...){ char buffer[4096] = ""; va_list ap; va_start(ap, format); vsprintf(buffer, format, ap); va_end(ap); printf( buffer ); printf( "\r\n" ); }

リダイレクト(標準出力stdout/標準エラー出力stderr)

CPP

% コマンド > ファイル名 のようにすると、コマンドがコンソールに出力する内容をそのままファイルにすることができます。 「コンソールに出力する」する方法は2つあります。1つは正常に処理できている場合に出力する「標準出力(stdout)」で、もう1つはエ…

RDTSC (read-time stamp counter) を使ったクロック計測

CPP

rdtsc命令を使う方法もあります。この場合でもできるだけ HANDLE hProcess = GetCurrentProcess(); SetPriorityClass(hProcess , REALTIME_PRIORITY_CLASS); などを使用して他プロセスの影響をなるべく排除した方が良い結果が得られます。(もちろんそのまま…

scanf()のマメ知識

CPP

ただ scanf("%s",&cMenu); とするとスペースが含まれた入力等があるとスペース前の文字列のみ取得されて 次のscanf()でスペース後の文字列が拾われてしまって、処理が思うようにいきません。以下のように処理するとスペース後の文字列が無視されるようになり…

Excelをコントロールする

CPP

はじめに 基本的にVBが使える環境ならVBで行うべき。VCで扱うには資料が基本的に足りないし、不親切。 開発環境の設定 下の文をソースに入れると使えるようになる #import "C:\\Program Files\\Microsoft Office\\Office\\Mso9.dll" no_namespace rename("Do…