seraphyの日記

日記というよりは過去を振り返るときのための単なる備忘録

c++

C++でATLを使わずにレジストリフリーのCOMサーバーを作成してWSHから利用する方法

概要 C++で、ATLを使わずにCOM DLLを作成する。ただし、レジストリは一切使わない。 作成したCOM DLLはレジストフリーで利用できるように、Side by Side Assemblyのマニフェストをつける WSHから、Microsoft.Windows.ActCtxコントロールを使ってSxSでCOMを呼…

ラムダ/クロージャ/ブロックの覚え書き

C#, C++, Objective-Cのラムダ(匿名関数)の基本的な使い方の覚え書きと、JavaSE7時点のラムダ相当のイディオムについての雑記。(※ プログラムの作用に主眼を置いて、単純に、Lambda ≒ Closure ≒ Block ≒ 匿名関数 という認識で書いてます。) C#4.0のラムダの…

ファイルの変更を監視する方法

Win32 APIにはファイルの変更を監視する方法として、少なくとも2つの方法がある。私は従来よりファイル監視のためのAPIとして、FindFirstChangeNotification関数を愛用している。 だが、WindowsNT系のUNICODEビルドであれば使えるというReadDirectoryChangeW…

MSHTMLを使ってHTMLを解析してみる*3

c++

URLを指定してHTMLを読み込みドキュメントツリーを見るテスト #include "stdafx.h" #include <mshtml.h> class CMSHTMLParserTest : public CAtlExeModuleT<CMSHTMLParserTest> { public: HRESULT PreMessageLoop(int nShowCmd) throw() { HRESULT hr = CAtlExeModuleT<CMSHTMLParserTest>::PreMessageLoop(nS</cmshtmlparsertest></cmshtmlparsertest></mshtml.h>…

C++からSQLite3を使ってみる。

Python2.5でSQLite3を使って以来、C++でも試したいと思っていた。 Windows用のSQLite3のDLLは、msvcrt.dllのみに依存する、という手軽なものであり、DLL自体のサイズも400KB足らずと軽量である。 これを実際にプログラムに組み込んで使ってみた。 必要なもの…

ActiveScriptHostのスクリプトに渡すIDispatchの作り方(レジストリなし)

ActiveScriptHostのスクリプトに渡すIDispatchの作り方のメモ。スクリプトはオートメーション型でのみ動作するので、IDispatchを実装したオブジェクトを渡す必要がある。 DUALインタフェースを手作業で作るのは煩雑すぎるが、ATLのウィザードを使うと余計な…

ActiveScriptHostの最小(?)の雛形

#include <stdio.h> #include <tchar.h> #include <locale.h> #include <atlbase.h> #include <atlcom.h> #include <activscp.h> class __declspec(uuid("{B54F3741-5B07-11cf-A4B0-00AA004A55E8}")) VBScript; //class __declspec(uuid("{F414C260-6AC0-11CF-B6D1-00AA00BBBB58}")) JScript; class __declspec(uuid("{147F…</activscp.h></atlcom.h></atlbase.h></locale.h></tchar.h></stdio.h>

const_reverse_iteratorは非constなコンテナからは返せない?

c++

またC++の深遠なる世界にハマる。 コンテナが返すイテレータは、それと同じタイプのイテレータであることしか保障されていないらしい。constなコンテナならconstイテレータ、非constなら非constイテレータ。http://forums.belution.com/ja/cpp/000/010/48s.s…

_tfindfirst64のなぞ

VisualC++でソースを書くとき、マルチバイト版とUNICDE版とで共通にかけるようにTCHAR系のAPIを用いる。これはマクロでコンパイル時にマルチバイト版かUNICODE版の、どちらかに翻訳される。 同様にCランタイムでも同じようにTCHAR系がサポートされている。こ…

「C++設計と進化」を買う

C++の設計と進化 C++の日本における最も著名なエヴァンジェリストであり、cppllメーリングリストで主催者、且つ、この本の翻訳者であるエピステーメー元帥が宣伝していたので予約購入。 そのかいあってか、初日でコンピュータ部門トップの売り上げで、品切れ…

Win32サービスを再勉強

以前はアプリケーションを形作ってから「サービスにして欲しい」という要望をうけて、とりあえず、あちこちのサンプルをみて真似しただけのサービスだった。 改めてMSDNライブラリを見ながらサービスを作ってみる。以前気が付かなかったこと。(1) CreateServ…

同期オブジェクトを使用せずに複数プロセスで共有データを保護する方法

c++

while( InterlockedExchange( &lock, 1 ) != 0 ) { Sleep( 100 ); } __try { ...... } __finally { InterlockedExchange( &lock, 0 ); }共有データ上にロック用のLONG値の領域を確保。 InterlockedExchange API(win95でもサポートされている)を用いて保護ブ…

DLLの静的データセグメントを複数のプロセスで共有する方法

ソース内で静的データセグメントをPRAGMAで定義。かならず初期化しておく。 #pragma data_seg("SHAREDMEM") namespace { LONG volatile lock = 0; LONG volatile data1 = 0; LONG volatile data2 = 0; } #pragma data_seg().DEF内で、指定したセグメントが共…

久しぶりにATLをいじる。

私が担当しているアプリケーションで、その日に配信されるすべての項目は、それぞれ1つ1つ別のHTMLページでシート化されているものがある。顧客は、これをすべて印刷して目視でチェックしているらしい。で、いちいちページを開いて印刷していては手間がかか…

Beckyとgpgの接続方法?

c++

gpgでは標準入出力で暗号化・複合化データをやりとりできるが、同時にコンソールからのパスフレーズ入力も受け付ける。 同様なことはsshでも行われているから、このテクニックが分かると、ちょっとしたツールを作るのにいいのではないか、などと思う。 標準…

gccで共有ライブラリを創る。

linuxの共有ライブラリは「lib*.so」という名前でなければならない。 実際にはバージョンやリビジョンをふくむ名前を作成し、そのリンク*1を作成する。[参考リンク] http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html (http://…

gccでスタティックライブラリを創る。

linuxのスタティックライブラリは「lib*.a」という名前でなければならない。 スタティックライブラリの作成 cd lib gcc -c ../src/my_static_lib.c ar rsv libmystaticlib.a my_static_lib.oコンパイルはオブジェクトの構築のみ。リンクはしない。 それを ar…

postgreSQLのプログラミングI/F (C言語篇)

あとはC言語I/FとJDBCが使えれば実用上問題なし。 apt-get install postgresql-devel でC言語I/Fがインストールされた。 manページをつかえるようにする方法が分らないが、libpq-fe.hをみたかぎりでは、それほど沢山のAPIがあるわけでは無さそうだ。 include…

.ZIP File Format Specification

APPNOTE - PKZIP/SecureZIP - PKWARE Support Site ZIPフォーマットの仕様。 Info-ZIP's Zip Info-ZIP、ソースコードあり。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=12&topic=12517 日本語ファイル名を含むZIPファイルの扱いについて興味…

ACEの回帰

The ADAPTIVE Communication Environment (ACE)の回帰テスト「ACE_wrappers/build/tests」をmakeしてperl run_test.plして、テストをかけて寝る。 朝おきたら、結構な量のエラーが。 Running WFMO_Reactor_Test Error: ././INET_Addr_Test_IPV6 does not exi…

FedoraCore2にACEを入れてみたいと思ったり。

日曜日にFedoraCore2にThe ADAPTIVE Communication Environment (ACE)*1をいれてみようと思い立つ。ACE.zipを展開し、マニュアルにしたがい「../condifure」してみるが、なにもうごかない。 しかたなく、レガシーな手作業によるconfig.hやらmakeincludeやら…