ログイン

2016年3月 弊社ホームページは新しくなりました。 https://thinkridge.com

メインメニュー

携帯公式サイト


携帯電話をもっと便利に
もっと楽しく


史上初の吹奏楽専門着メロサイト


POPで癒しでライトでとんがって気持ちのいい〜オルゴール着メロをあなたに

Magome

クラウドベースの MIDI シーケンサ Magome

音楽制作に興味のある方を対象に、スタンドアロンでも使え、ネットならではの面白さも兼ね備えた音楽制作アプリの提供を目指しています

for 携帯電話

https://thinkridge.com/m/
ケータイはこちらへ

2013年6月15日(土曜日)

boost::asio ソケットを別プロセスに渡す

カテゴリー: - takatsuka @ 10時11分29秒

久しぶりに boost::asio ネタです。

サーバーで、acceptしたソケットを、別のプロセスに渡したい場合があると思います。
そのあたり boost::asio では簡単にできるんだろうか?と思い、ソースを眺めたり、Examples 見たりしたけど、そのものズバリっぽいものが見当たらない。
Examples には fork の項に近いのがあったんですが、fork() とか使ってるとこからして windows 向けではなさげだし・・・、

というわけで、今回のネタも windows 向けです。
サーバーを windows でってのがそもそも・・・という意見もありそうですが、windows でも P2P アプリを作りたいとか、ちょっとは需要あると思うんです。

というわけで、boost::asio で、accept したソケットを別のプロセスに渡す方法ですが、
結局、boost::asio だけで閉じることは出来ず win32 api を使ってます。

やることは、
複製元のソケットで、

boost::asio::ip::tcp::socket socket;
・・・
WSAPROTOCOL_INFO pi = {0,};
::WSADuplicateSocket( socket.native(), ::GetCurrentProcessId(), &pi);
SOCKET h = ::WSASocket( pi.iAddressFamily, pi.iSocketType,pi.iProtocol, &pi, 0, 0 );
socket.close();

ってハンドルをこさえて、複製先の子プロセスでは、

socket.assign( boost::asio::ip::tcp::v4(), h );

とやることで実現してます。

注意点としては、

#define BOOST_ASIO_DISABLE_IOCP 1

を入れることなんですが、これを入れることのデメリットがよくわからずにやってます。

こさえたサンプルアプリのソース一式を置いておきますので、必要な方は見てみてください。そしてダメ出しとかお願いします。
クライアント側がないと動作が見にくいという場合、boost::asio 使ったチャットソフトが同じところにありますので、そちらも参照下さい。

http://www.thinkridge.com/modules/mydownloads/

そういえば、いつのまにか boostpro サイト が終了してたんですね。
インストーラーは便利だっただけにとても残念です。
運営の方、お疲れ様でござました。感謝です。


2013年5月12日(日曜日)

WebKit (windows版) のビルド

カテゴリー: - takatsuka @ 21時42分52秒

WebKit (windows版) のビルド

けっこう苦労したので備忘録として。

開発環境の準備
・VisualStudio 2005 standard をインストール。

・Microsoft Platform SDK for Windows Server 2003 R2 をインストール

・Microsoft DirectX SDK (February 2010) をインストール

・QuickTime SDK をインストール

・VisualStudio2005 のサービスパックとか WindowsUpdate で出てくる VisualStudio 系のパッチを、全てインストール

・Cygwin をインストール。( webkit.org にある cygwin-downloader.zip )

・VisualStudio2005 の メインメニュー [ツール] - [オプション] - VC++ ディレクトリ で、以下を追加
 実行可能ファイル
  C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Bin
 インクルードファイル
  C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include
  C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Include/mfc
  C:/Program Files/Microsoft DirectX SDK (February 2010)/Include
  C:/Program Files/QuickTime SDK/CIncludes
 ライブラリファイル
  C:/Program Files/Microsoft Platform SDK for Windows Server 2003 R2/Lib
  C:/Program Files/Microsoft DirectX SDK (February 2010)/Lib/x86
  C:/Program Files/QuickTime SDK/Libraries

ソ−スの用意

・WebKit Open Source Project の WebKit Nightly Builds から、ソースを取得 ( 自分の場合は WebKit-r149799 )

・C:/cygwin/home/(user)/WebKit に展開。

・WebKitSupportLibrary.zip をダウンロードして、zipファイルのまま上記のフォルダに配置。

・cygwinを起動。

・$ WebKit/Tools/Scripts/update-webkit を実行。成功を確認する。

ビルド

・$ WebKit/Tools/Scripts/build-webkit –debug を実行。

・或いは、C:/cygwin/home/(user)/WebKit/Source/WebKit/win/WebKit.vcproj/WebKit.sln を vs2005 で開き、ビルド。

ビルドエラーを取る

・C:/cygwin/home/(user)/WebKit/Source/WTF/WTF.vcproj/copy-files.cmd の
# FIXME: Why is WTF copying over create_hash_table? の行をコメントアウト。

・warning C4819:ファイルは、現在のコード ページ・・・と出るファイルを全て、unicode 形式で保存しなおす。

実行

・Windows 用 Safari 5.1.7 をインストール。

・WebKit.sln を vs2005 で開き、WebKitLib をスタートアッププロジェクトにする。

・WebKitLib のプロパティページ - デバッグ で以下に設定
 コマンド $(PROGRAMFILES)/Safari/Safari.exe
 環境 WEBKITNIGHTLY=$(OutDir)

・WebKitLib を実行。
 ビルドしたDLLを利用する形で safari が起動する。
 がしかし、実行したとたんに、実行時エラーで終了。とりあえずここまでで週末終了。

注意事項

・WebKit Nightly Builds から古いものが取得出来るが、WebKitSupportLibrary.zip とのバージョン不整合が起こるのか、update-webkit が失敗する。解決策不明。

・DirectX SDK は、VisualStudio2005 で使える版を使う。

・プロジェクト : warning PRJ0018 : 以下の環境変数が見つかりませんでした: $(PRODUCTION) とか出ることがあるが無視してOKらしいので無駄に悩まないこと。

以上、webkit の関係者に感謝しつつ、どなたかの参考になれば幸いです。


2009年5月9日(土曜日)

STL auto_ptr のデバッグ豆知識

カテゴリー: - takatsuka @ 16時39分20秒

VisualC++2005,2008 限定です。

auto_ptr を使うと、生ポインタが隠蔽される為か、デバッガのウォッチ画面での確認が面倒になります。

auto_ptr

この例で言うと、ap をウォッチしてみても CSub という型までは知ることが出来ますが、CSub の中身を見ることが出来ません。

ここで諦めてしまうとこですが、auto_ptr のメンバ変数 _Myptr までを入力(この例で言うと「ap._Myptr」と)するとアラ不思議、CSub の中身まで見ることが出来ます。

というか、手動で入力せずとも普通に見れて欲しいとこです。次期 VisualStudio2010 で是非対応して欲しいです。

なお、仮想関数を持たない非ポリモーフィックなクラスでは面倒みてくれないようで表示されません。(これは納得できます。)
しかし、その場合でも手動でキャストすると表示されます。「(CSub*)ap._Myptr」とします。
型がわかっている場合にしか使えませんが、多少はラクになるかもです。

ちなみに boost::shared_ptr は特別なことしなくても、メンバ変数 px が何故か普通に見れます。

となると、何故 auto_ptr だけダメなのか、
難しい記述をしているのか?
マイクロソフトが VisualStudio2005、2008 で何かやらかしてしまったのか?
上位エディションだと実はちゃんと見れるとか!? (自分 Standard エディション使ってます。)
少し興味沸くところですが・・・ま、いいかなと。

以上。中途半端なネタですみません。


2008年4月16日(水曜日)

VisualStudio2008が落ちまくる

カテゴリー: - takatsuka @ 21時34分58秒

VisualStudio2008の開発環境がやたらと落ちまくります。
特に危険な操作が CTRL + TAB。
このキー操作を多用している自分は1時間に1〜2回程度の割合で落ちます。
落ちると編集中のソースはもちろんお釈迦になるので、いつの間にか、定期的に CTRL+S (ファイル保存) を押す癖が付いてしまいました。

これって一昔前の悪評高いマックのCM、Windows を皮肉るヤツそのまんま・・・。

Windowsって、アプリが落ちた時に「マイクロソフトに情報を送信しますか?」というダイアログが出てきます。
あれはホントに役立っているのかどうか疑問ですが、業務上まずそうな場合を除き、これでもかってくらいに送信しまくってやってます。
あんだけ送信してるんだから、是非改善してほしいです。

そういえば、VisualStudio開発環境の CTRL + TAB というキー操作の挙動が、VisualStuido2005以降から改悪されちゃったんすけど、VisualStuido2003以前と同様の挙動に戻すことは出来るのか、ご存知の方おられましたらご助言賜り度。


2007年6月17日(日曜日)

新しいフィルタ

カテゴリー: - takatsuka @ 20時18分35秒

新しいフィルタ

VisualStudio2005の誤字を発見。
新しいフィルタ になってます。
正しくは「新しいフォルダ」のハズ。

仕事でしょっちゅうスペルミスを犯す自分、マイクロソフト様にも同様な人がいるのかと思うと、微笑ましく感じました。

 


2007年1月28日(日曜日)

STLとMFCのマップ速度比較

カテゴリー: - takatsuka @ 11時30分29秒

プログラマらしいネタを・・。

C++で使える標準ライブラリに STL というのがあり、さらに VisualC++ には MFC っていうクラスライブラリがあります。
この二つのライブラリには結構ダブる機能があるります。文字列、配列、マップなどなど。
なので、Windows限定でコーディングする場合、どっちを使えばよいか悩むときがあります。

というわけで、これらダブる機能のうち、パフォーマンスが気になってしまった マップ について速度比較してみました。
STL からは map と hash_map、MFCからは CMap の3種類です。

というわけで、C/C++の小手先最適化テクニック にコンテンツとして追加いたしましたので、興味がある方は是非ご覧ください。
もしかして自作のベンチマークアプリにミスとか偏りとかがあるんじゃないかと少々不安なので、もし何かお気づきになられましたら、ご意見などいただければ幸いです。


2006年6月23日(金曜日)

VisualStudio2005 の C++/CLI

カテゴリー: - takatsuka @ 00時42分50秒

VisualStudio2005 の C++/CLI はスゴイっす。
最近までは、無料版の VisualStudio2005 ExpressEdition を試していました。
C# や VB でコーディングする分には普通に使えますし ClickOnce も出来ます。
C++ でも Platform SDK をインストールすることで、ネイティブなWin32アプリケーションが書けます。がしかし自分の場合は、MFC で書いた過去のコード資産や慣れを活かしたくて、ExpressEdition だとちょっと物足りなく感じ、StandardEdition に移行しました。
一番興味深かったのが C++/CLI で、過去のソフトウェアをマネージドコードと連携できるのか?というとこだったので、過去アプリの中から、MFCのみならず libpng zlib というC言語のライブラリも使った画像変換アプリを題材にしてみたのですが、ものの見事に期待通りの動作を実現してしまいました。スゴイです C++/CLI。
C# と連携させることで .NET Framework2.0 の ClickOnce で配信まで出来ました。スゴイです。
で、早速アプリケーションを公開してみました。こちらからどうぞ。
下馬評では、C++/CLI は既存コードを生かす為だけに使って、新規でコーディングするなら C# や VB を使ったほうが良い。と言われているようですが、自分は C++/CLI はメインで十分使えそうな気がしました。使いやすいし何でも出来ますよ。単に C++ で慣れてるからそう思うだけかもしれませんが。
というわけで、VisualStudio2005 & C++/CLI のスゴさを実感できたので、今後は徐々にそれを活かしていこうと思いました。


2005年12月17日(土曜日)

VisualStudio2005ExpressEdition

カテゴリー: - takatsuka @ 23時02分16秒

VisualStudio2005ExpressEdition日本語版が公開されたってことで早速試してみました。
C++、C#、VBなどなど別々のイメージになってます。フルセットのイメージを用意してくれれば、ものぐさな自分にはかなり有難いなと思いつつも、とりあえずC++を。
んで、さっそくVisualC++起動して新規プロジェクトしてみると選択肢がえらい寂しい。
HPの説明を読むと、MFC/ATLはExpressには含まれないそうなので、素のWin32アプリやマネージドコード用と割り切ったほうがよさげです。
Expressは入門者向と謳っているクセにMFC使わせないってちょっと不思議っすね。(マイクロソフトの戦略か?)
ちなみに自分、MFC使わずにWin32アプリ作るなんてもう無理です。
C++/CLIのスゴさを体験してみようと思ってたんすけどMFC使いたかったっす。ちょっとガックリきました。
なにはともあれ無償提供されるってのは喜ばしいことで、しかも開発環境としてのVisualStudioはかなり優秀だと思ってます。アンチマイクロソフト派の方には興味ないかもしれませんが、せっかく無料で公開されたので、一度試してみるのもよいのではと思います。
既存のVS6やVS2003とも共存してインストール出来るってことなので気軽に試せます。


42 queries. 0.064 sec.
Powered by WordPress Module based on WordPress ME & WordPress

カレンダー
2019年 5月
« 11月    
 1234
567891011
12131415161718
19202122232425
262728293031  
月別過去ログ
カテゴリ一覧
検索
最近の投稿
最近のコメント
投稿者ブロック