久々のMFCプログラミングでハマルorz

客先指定でVisual Studio 6を使っているわけですが…とにかく使いにくいです :roll: VS6が現役バリバリの当時は、ここまで使いにくいと感じなかったのですが…VS2005やVS2008を使い出すとVS6は化石ですね :mrgreen:

もう、何から何まで使いにくいです。ソースはVS2005で書いて…VS6に持っていくことも考えたのですが、コワいので地道にVS6 + エディタでガンバッテます :|

で、サーバ側もC#で書きたかったのですが…これも客先指定でMFC/C++で書いてます。

ダイアログベースで簡単なインタフェースしかない代物なんですが…エディットボックスに通信の経過を表示させようと、通信のスレッドからエディットボックスを弄ろうとすると…アサーションエラーでたぁ :shock:

要するにMFCはスレッドセーフじゃないので、別スレッドからダイアログ側を弄ろうとすると例外が発生ようです。そう言えば、MFC + スレッドの取り合わせのプログラムを書くのは初めてのような :mrgreen:

この辺りの事情は、C#やVB.NETでも同じようですね~MSDNに「Windows フォーム コントロールのスレッド セーフな呼び出しを行う」とかサンプルがあったりします。

しかし、MFCでの解決方法を書いてるMSDNを見つけることができませんでした :roll: たぶん、「C++ と MFC を使用するマルチスレッド」あたりを読んで理解しなきゃダメなんでしょうけど…わ、わかりにくい :|

まぁ、よくわからないので結局ダイアログに対して、WM_USER + 1あたりのメッセージをスレッド側から飛ばしてダイアログ側でエディットボックスを弄るように変更して対処しました。排他が面倒だったので、ガチなタイミングでの挙動が若干不安ですが…たぶん、今回の用途であれば十分じゃないかと :arrow:

MFCをちゃんと勉強せずに使ってるツケですね :(

Visual C++6.0プログラミング 基礎編―MFCを活用したWindowsアプリケーション開発 Visual C++6.0プログラミング 基礎編―MFCを活用したWindowsアプリケーション開発
田中 正造

標準講座MFC6.0―Visual C++による効率的なWindowsプログラミング (Programmer’s SELECTION) VisualC++逆引き大全 500の極意 Win32API完璧マスタ―Visual C++プログラミング
by G-Tools

AmazonでMFC関連の本を検索してビックリです。定価より値段の上がっている本が結構あったりしますね :roll:

Be Sociable, Share!

TrackBack URL :

Comments

  1. 5月 21st, 2009 | 9:07 PM

    Win32API完璧マスタ―Visual C++プログラミング

    Win32API完璧マスタ―Visual C++プログラミング
    まずは動作を確認できて、よろしいと思った。

    コンソールプログラムからの移行の説明や、軽いOSの説明があって躓きやすい部分のケアがありがたい。

Leave a reply