STLのrandomを使う場合の備忘

確認したのはC++ Builder 10.xのTokyoとRioだけなのでCLang一般ではないと思う。 しかし、インプリメントを確認しないで実装するとセキュリティホールになると思われる。STLのrandomライブラリーはCベースのrandの代わりになる乱数ライブラリだ。 実用的な乱…

C++ Builderでアイコンをリソースに登録する場合の備忘

Windowsプログラムでアプリケーションのアイコンの他に、関連付けファイルのためのアイコンなどを登録したい場合がある。 ただし、何も考えないで登録すると、アプリのアイコンがリソースで登録したアイコンになってしまう。C++ Builder(Delphiもそうだろう)…

うちもやられたノートンさん

朝のPCを立ち上げてしばらくした頃、ノートンインターネットセキュリティが「脅威の処理中です」とメッセージを流してきた。 何かしらあったかなと疑問に思いながら処理完了後のログを見ると、「Heur.AdvML.B」ウィルスと判断されて削除された実行プログラム…

QGIS初心者がCRSの設定ではまったこと

判っている人にとっては当たり前のことでも、知らない人は思いもつかないことがある。 今回身をもって思い知った。QGISは以前触ったことがあるものの、頻繁に使うわけでもない。まあ初心者といってもいいだろう。 オープンソース系で活発な活動を行っている…

Excel2010で令和元年

改元は、日本の伝統と独自性とは思うものの、実務での利用はつらいものだ。 自分の会社内では西暦で通すことにしているが、お客への対応はまた別なので、やきもきしながらWindowsの対応を待っていた。 さて、ようやくWindows10(1809)の改元対応Updateが降り…

ポインターのポインターを返すコードで参照を使うべきではないと思う。特にDLLでは

C++

DLLを使ったアプリケーション開発で、サードパーティーのコードではまった件。特徴的なのがDLLでエクスポートされている関数の定義が下の様になっていた。 なお、DLL特有の修飾は今回関係ないので省略している。void func( char*& data );さて、この関数は、…

SelectDirectoryでリンカエラー

SelectDirectoryを使うプログラムを書いているとき、リンカエラーを起こすことがある。 どうも、よくわからずいろいろしている内にリンクできてなんとなく放置していた。今回、C++ Builderが10.3(Rio)になったのので、既存のプログラムをコンバートしてみる…

ショートカットにおけるファイルの実体参照解決の順番

ショートカットを作成するプログラムのテストをしているとき、ショートカットの実体参照に優先順位があることに気がついた。ショートカット内のプログラムへの実体参照はIDLISTとPathの2つがある。 ショートカットの実行では、まずIDLISTが参照され、IDLIST…

ドロップターゲットのC++による実装の例

ドロップターゲットをC++で実装する例ドロップを抽象化するクラス。 動的生成で管理するならinitの内容をコンストラクターに移動するのもありだろう。 class TDropTarget; class TMyDrop { friend TDropTarget; private: HWND FHwnd; TDropTarget* FDropTarg…

Shell IDList Arrayについて

クリップボードフォーマットにおいて、Shell IDList Arrayを用いた通信について記事が少ないので一言。CIDAのフォーマットの定義は以下の通りだ。 typedef struct _IDA { UINT cidl; // IDLISTの数 UINT aoffset[1]; // IDLIST構造体のリスト } CIDA, * LPID…

Crypto APIによる暗号化

Crypto APIによる暗号化は、ちょっとした用途で暗号化強度がさほど必要でない場合に便利だ。 今回は文字列を暗号化・復号化するルーチンのサンプルを提示する。 もっと強度が必要な場合には、Cryptography API: Next Generationを用いるとよいようだ。 こち…

deleteをなくすには

deleteコードを減らすことは、複雑なコードの保守やリソースリークの観点で望ましい。下のようなコードでdeleteを消したい。 なお、new[]で確保した配列は、delete[]で削除しなければいけないことに注意。 class C { public: char* buf; unsigned int size; …

vectorとunique_ptr その3

vectorはコピーを使う、だからauto_ptrとおなじくunique_ptrは使えない。 以下のコードはコンパイルエラーが発生する。 vector<unique_ptr<C> > v; v.push_back( unique_ptr<C>( new C ) ); まれに、このコードをおすすめするHPが見られるが、コンパイルできるコンパイラーが</c></unique_ptr<c>…

vectorとunique_ptr その2

前回はコピーすべきところでムーブすべきではないことがわかった。 コードはshared_ptrを用いることで、すべてがうまくいくようになる。 class C { public: shared_ptr<int> d; C() : d(new int(0)) {} C( const int n ) : d(new int(n)) {} // コピーコンストラ</int>…

vectorとunique_ptr その1

vectorとunique_ptrの相性は悪い。 vectorはコピーが伴うものだし、unique_ptrはコピーコンストラクタを持たない。 以下のようなコードを考えてみる。 class C { public: int d; C() : d(0) {} C( const int n ) : d(n) {} ~C() {} }; void test_code() { ve…