WinAPIのCreateCompatibleDCとCreateCompatibleBitmapの自分用のメモです. デバイスコンテキストとは デバイスコンテキストの互換性とBitBlt関数 CreateCompatibleDC関数だけではBitBlt関数は使用できない CreateCompatibleBitmap関数 CreateCompatibleBitma…
Windowsでメモリデバイスコンテキストのサイズを取得するには以下のようにメモリデバイスコンテキストのビットマップを取得してからビットマップヘッダに情報をコピーします. WinAPIバージョン // hDCは対象のウィンドウのデバイスコンテキストとする HDC hM…
C++のオブジェクト指向プログラミングでメモリリークをおこしてみましょう. 以下のクラスを考えます. コンストラクタでヒープを確保し、デストラクタで解放するだけのクラスです. class MyObj { public: MyObj(size_t byte) :pMem(NULL) { uint8_t *ptr = (u…
C#(というより.NET Framework)のフォームクラスはその.csファイルの最初のクラスでなくてはいけないというルールがあります. このルールが守られていない場合、フォームデザイナーを開くと「クラスFormXXはデザイン出来ますが、ファイルの最初のクラスではあ…
検証環境 項目 説明 OS Windows11 Visual Studio 17.8.0 (2022) 言語 C++(MSVC) 開き方 アプリケーションをデバッガで実行中にデバッグ->ウィンドウ->メモリ から開くことが出来ます. メモリ1(1)からメモリ4(4)があり、最大で4つまで同時に開くことが出来ま…
C言語で関数内のstatic変数を複数の関数で共有したいときは、関数ポインタを使おうという提案です. 以下のようにstatic変数を定義した関数func()に、実際にstatic変数を使いたい関数ポインタを渡し、func()にstatic変数を引数にセットしてもらおうという算段…
WindowsAPIの関数であるAddVectoredExceptionHandler()の使い方をまとめたメモです 検証環境 項目 説明 OS Windows11 Visual Studio 15.9.68(2017) AddVectoredExceptionHandler関数とは ベクター化された例外ハンドラー(VEH, Vectored Exception Handler)を…
C言語やC++でペリフェラルへのアドレスに構造体としてアクセスする際、以前は次のように書いていました. #define PERI_ADDR (0x0000400) typedef struct myst{ int member1; int member2; } myst_t; int main(void) { volatile myst_t *pSt = (myst_t*)PERI_…
次のWindows用マルチスレッドのプログラムは、「hoge」というメッセージを表示するスレッドを100個ディスパッチし、全てのスレッドが処理を終えたらプログラムを終了することを期待したプログラムです. つまり、コマンドプロンプトにhogeが100個表示されるは…
2024年4月の試験にて情報処理安全確保支援士試験に合格しました. 勉強方法や使用した参考書を備忘録として残しておきます. 使用した参考書 勉強は主に以下の3冊の本を利用しました. 情報処理安全確保支援士試験 ALL IN ONE オールインワン パーフェクトマス…
TIのARMコア搭載プロセッサの評価ボードでuSDカードからLinuxを起動させたときのメモ. 公式ガイダンスの手順を追っただけ. ソフトウェアの準備 SDカードイメージ TIから配布されているSDカード用のイメージ(.wic)をダウンロードします. 以下の評価ボードの商…
複数のプロセス間でメモリを共有する方法としてよく使われるのは共有メモリですが、Win32APIの WriteProcessMemory() を用いると異なるプロセスのメモリを書き換えることができます. これを使ってグローバル変数を他プロセスから書き換えてみましょう. 環境 …
C/C++のプログラムにおいてプロセス名からpidを取得するプログラムを作りました. 環境 項目 説明 OS Windows11 Visual Studio 17.6.2(2022) ソースコード 以下は「chrome.exe」というプロセスのプロセス識別子を表示するためのソースコードです. #include <windows.h> #</windows.h>…
実行環境 項目 説明 OS Windows11 WinMerge version 2.16.30.0 やり方 ファイル->形式を指定して再比較->バイナリ を選択するとhex形式で表示してくれる バイナリ形式で表示する 参考 ftsh.hateblo.jp
メッセージループを自分で書かずにWindowsのコンソールアプリケーションでタイマーを使う方法が無いか調べたところ、 CreateTimerQueueTimer関数 というものを見つけました. 以下プログラムは、約100msごとにHelloという文字列がコンソールに表示されます. #…
Visual Studioで作成したソリューションやプロジェクトはフォルダごと場所を移動してもIDE上で正しくビルドすることが出来ます. ということはパスが自動的に解決されていることになりますが、その仕組みを簡単にまとめました. プロジェクトのマクロが関わっ…
Visual Studioはマクロ(≒環境変数)を使用してビルドを行います. このマクロのうち重要そうなものをピックアップしました. バージョンはVS2017を対象にしていますが、最近のVSであれば大きく変わることはないはず. 相対パスで書かれたものは $(ProjectDir) …
2024年今年の目標をば. 情報処理安全確保支援士試験に合格する 基本情報と応用情報は2023年に合格したので、この勢いで高度試験も1つくらい取るつもりです. 本当に取りたいのはエンベデッドシステムスペシャリストなのですが、秋試験しかないので春試験で情…
Jiangsu Qin Heng (WCH) 社のCHから始まる代表的なICをまとめてみた. CH340シリーズ 末尾にアルファベットが付き、パッケージや追加機能が区別される. 次の機能がある. USB-UART変換 USB-パラレルプリンタ変換 回路実装済みボードも多く販売されているが、チ…
DLLを利用するEXEを実行したところ、プログラムと同じフォルダにDLLがあるにも関わらずDLL周りのエラーが生じることがありました. 原因はEXEが利用するDLLがさらにほかのDLLを参照していたことでした. つまり、EXE --(use)--> DLL1 --(use)--> DLL2 という関…
c++の<algorithm>中にはイテレータを引数に渡すことでコンテナの全要素に対して探索をする関数があります. 探索する対象が配列の場合はポインタを引数に渡すことが可能です. 例えばstd::any_of()は次のように使用することができます. #include<iostream> #include<algorithm> #include<vector> using </vector></algorithm></iostream></algorithm>…
不揮発性メモリICの型番とその種類についてざっくりまとめました. 自分用のメモなので間違ってたり一般性がないものが含まれてるでしょうが、あしからず. 24xx I2C対応不揮発性メモリ. 調べた限りではEEPROMしかなさそう. 表面実装が多いがDIPも普通に手に入…
以下のコードはVisual StudioでWinsock2を使おうとしたときのものです. Microsoftのサンプルコードをコピペしただけなのでビルドできると思いきやコンパイルエラーになります. #include <iostream> #include<WinSock2.h> #include<ws2tcpip.h> #include<functional> /* これがないとリンク時にエラーになる </functional></ws2tcpip.h></winsock2.h></iostream>…
Windowsの動的ライブラリ(DLL)中のグローバル変数を複数のプロセスで利用する方法とそのグローバル変数の寿命についてまとめました. DLLでデータを共有する方法 DLLのデータセグメントに置かれた変数は複数のプロセスで共有可能です. なので data_seg pragma…
USBシリアル変換ICを使ってマイコンとシリアル通信をした時のメモです. 準備するもの 開発用PC STM32NUCLEO-F072RB USBシリアル変換IC USBシリアル変換IC用ドライバ その他 STM32CubeIDEでの作業 プロジェクトの作成 コンフィギュレーション printfの記述 フ…
結論から言うとsizeof()じゃなくてstrlen()を使いましょうという話です. x86(32bit)環境で以下のようなプログラムをビルドして実行すると、いかなるコマンドライン引数であっても「size:4」と表示されます. #include<stdio.h> int main(int argc, char** argv){ if(ar</stdio.h>…
HTMLの<area>タグのcoordsに設定された属性値にjavascriptからオフセットを与えようとしたときに引き算はうまくいくのに足し算はうまくいかないという事態に遭遇しました. 以下のコードを実行して加減算をした時の各座標の値を表示してみると原因が分かります. <map name="example"> <area shape="rect" coords="50,50,150,150"> </map> <script></area>…
個人的にたまによく使うサイトのリンク集. 完全に自分用メモ.徐々に更新 MSVC UCRT 関数リファレンス (アルファベット順) コンパイラ コマンド ラインの構文 コンパイラオプション リンカー オプション WinAPI(ヘッダ別ページへのポータル) Windows コントロ…
メモリ系のライブラリやコンテナを使っているとよく見るsize_t型についてまとめました. 検証環境 size_t型は処理系依存 size_t型のtypedef宣言 Cの場合 C++の場合 size_t型の意味 検証環境 項目 説明 OS Windows11 MinGW-W64 gcc version 8.1.0 size_t型は処…
サブディレクトリ中のファイルをgit add 後にgit statusしてもファイルがuntrackedなままだった. 原因はサブディレクトリに.gitフォルダが存在していることだった. サブディレクトリの.gitフォルダを削除したらgit add できました.