So-net無料ブログ作成
検索選択
プログラミング ブログトップ

マルチスレッドアプリケーションの設計 [プログラミング]

初めて本格的にマルチスレッドアプリケーションを設計します。しかも、クラスを使います(オブジェクト指向)。ちょっとびびでましたが、連日の努力でやっと光を見えて来ました。
マルチスレッドの仕組みを使って何かのメリッドがあるかという疑問がありましたが、最近ちょっとわかってきた気がします。マルチスレッドを使うことで、メインスレッドの処理を分散し、メインスレッドの反応時間を短縮できると思います。ただし、すべてのスレッドを同期させる場合、工夫する必要があります。。。方法としては、アプリの状態遷移をしっかりを設計し、状態を管理することです。


今日の心得 [プログラミング]

今日の心得をまとめます。

 

(1)VBの計算式において、数字の後ろに対応のアルファベットを追加する必要がある。

 

(2)VCでデバッグするときに、用いるDLLのLib(デバッグ版)をプロジェクトに追加してデバッグすれば、DLLのコードまで追える。

(3)VBはデフォルトで4バイトアライメント、VCの場合は設定できる。

 

今日は以上。疲れました。


VC6.0で作ったDLL を VB6.0で利用し、同時にデバッグする... [プログラミング]

VB6.0のプロジェクトで VC6.0で作ったDLL を利用しているので、両プロジェクトを同時にデバッグできればいいな~と思いました.


いろいろと試してみましたが、できませんでした.

 

最後に、先輩に聞いてみました...さすかに先輩、教えてくれました.

 

VC6.0のDLLプロジェクトの設定で デバッグ時利用されるEXE をVBデバッガのEXEファイルを設定、EXE起動時の引数をVB6.0のvbpファイルを設定.

 

これで、DLLプロジェクトでブレークポイントを設定したうえで、デバッグを開始したら、VBデバッガが起動され、VB Exeプロジェクトもロードされ、両プロジェクトは同時にデバッグできるようになります...

 

よし、早くデバッグを進めないと...ベータ版が遅れますよ...Whew


C ランタイム関数の Win32 で対応する関数一覧 [プログラミング]

今日掲題のマイクロソフト公式資料を見つけました。詳細は以下のページ

 

http://support.microsoft.com/kb/99456/ja

 

ページ内容をコピーしようと思いましたが、長すぎでやめました。。。

興味のある方はマイクロソフトのHPへどうぞ。。。


GlobalAlloc と malloc との違い [プログラミング]

会社でアプリ(EXE)とDLLと同時にデバッグする際、EXEでDLLから取得した動的メモリをFreeをした途端、「debug assertion failed」が発生しました、なぜ?

 

EXEではchar ** ppをDLLの関数を渡し、DLLで動的にメモリ領域を確保し(pとする)、そして*pp=pでメモリのアドレスをEXEに教えます。EXEでメモリ空間を使って処理を行い、そして*ppを開放します。一見何の問題もありませんが、「debug assertion failed」が発生しました。

 

原因を探ってみたら、どうも、これはWindowsのメモリ管理に関係あるようです。malloc() はプロセスヒープからメモリを割り当てます。上記の例の場合はDLLのヒープから?!もし、そうでしたら、EXEでDLLのヒープ上のメモリを開放しようとすると、エラーが出るのは当然!!

 

解決方法として、Windows APIのGlobalAllocを使うこと。GlobalAlloc() はグローバルヒープ (システムヒープ) からメモリを割り当てますので、EXEで開放しても問題はないはず。。。来週に確認してみるとおもいます。

 

後、未確認ですが、calloc関数の中身実はGlobalAllocだという噂があるようで、移植性を考えたら、callocのほうはいいかもしれません。

 

参考資料

Win32 API 質問箱

APIより効率的なCランタイムルーチンを活用する方法(Cルーチン・Win32 API対応表)

Comparing Memory Allocation Methods

CRT オブジェクトを DLL 境界を越えて渡す際に発生する可能性のあるエラー

DLL内部で動的に取得した変数を、実行モジュール側で開放する方法


アプリ(EXE)とDLLと同時にデバッグするには(VC6.0) [プログラミング]

仕事の都合でアプリとDLLと同時にデバッグする必要がありました。いろいろと調べた結果、解決方法はやっと見つけました。詳細は以下の通りです。

  • (1)ワークスペースを作成する。

  • (2)作成したワークスペースにEXEのプロジェクトとDLLのプロジェクトを挿入する。

  • (3)ワークスペースに出力ファイルフォルダ(例."dbg")を作成する。

  • (4)EXEとDLLのそれぞれのプロジェクトの設定で、リンクタブの出力ファイル名を変更し、 先の(3)で作成したフォルダにそれぞれのEXE及びDLLが出力されるようにする。

  • (5)EXEとDLLのそれぞれをdebugモードでビルドする。

  • (6)EXE側のプロジェクトをアクティブにし、デバッグを行うと、普通にDLL内もデバッグ(ステップ実行等)行えます。


#DLLEXEのリンクに、libをインポートするなら、ワークスペース内にlib用のフォルダ(例."lib")を作成して、DLL側のプロジェクトオプションに「 /implib:"xxx.lib" 」(xxx.libは出力するlib名)と加え、EXE側で相対パスを用いて、そのlibを指定すると便利だと思います。

#
あと、共通ヘッダファイルなどが有る場合も、"include"というようなフォルダを作成し、そこにファイルをまとめるようにすると、両者で別のファイルを参照することがなく、よいかもしれません。


以上です。


Felica無線ICカード読書ツールの開発 [プログラミング]


Felica無線ICカード技術はソニー社の技術で、最近5年、10年、日本で応用が拡大しつづである。最近、Felicaに関連する業務を担当している。やはり、さすかにセキュリティ性の高い無線ICカードで、カードの中身を読書きするために、まず認証から。。。認証!Kar、Kbr、グループキー、ユーザーキー、エリアリスト、サービスリスト、ブロックリスト。。。いっぱいいっぱい。。。頭が詰まっている。。。でも、ちょっとずつ理解できている気がする。引き続き頑張ります。。。

 

image

Felicaの構造

Felicaのユーザーマニュアルはソニーのウェブサイトからダウンロードできる。

FeliCaカード ユーザーズマニュアル(PDF)



dependencywalker、すごいですね [プログラミング]


今日、アプリをデバッグするときに、不明のエラーが発生し、一時困ってました。

対象アプリが数多くのDLLを利用しており、エラーの発生個所がOS付属のDLLでした。

これはまずい~

原因が他のDLLにあるはず。。。と思い、インターネットでエラー個所の特定方法について調べてみました。

その結果、これを見つけました。無料でダウンロードできるDependencywalkerでした。

http://www.dependencywalker.com/

 

image


Visual Studio 6.0付属ツールには、Dependency Walkerがありますが、このバージョンではアプリのモジュール間の独立性しか解析できません。これと比べて、サードパーティのDependency Walkerはモジュール間の独立性はもちろん分析でき、そして、アプリ起動時のエラー発生個所特定もできます。。。すごい!!!メモ帳に入れます。



Windows.h と WIN32_LEAN_AND_MEAN [プログラミング]

今日の心得は WIN32_LEAN_AND_MEAN の定義です。

 

Windowsプログラムにはよく Windows.h を #include します。ただし、Windows.h には、実は沢山のスイッチがかけてます。WIN32_LEAN_AND_MEANはその中の一つです。Windows.h を #include する前に、WIN32_LEAN_AND_MEAN を #define することで、「余計」なヘッダファイルは include されず、コンパイルはすばやく終わるといわれています。

 

個人的に、コンパイルの速度よりは知らないヘッダファイルがインクルードされるのは 嫌 です。たとえば、単純にWindows.hをインクルードすると、winsock.h がインクルードされます。これは大きな問題です。Winsock現在の最新バージョンは2.2.2です(Wikipediaより、2010/08/03)、最新バージョンのWinsockに対応するヘッダファイルはwinsock2.hです。最新版のWinsockはマイクロソフトより推奨されています。ただし、もし単純にWindows.hをインクルードすると、ヘッダファイルを間違えることになります。気をつけましょう。。。

 

以上の理由より、Windows.hを利用する前に、その中身を一度見ておいたほうがよいと思います。


プログラミング ブログトップ
お財布.com - 無料で手軽に貯まる魔法のお財布


DMM.com DVD通販、レンタルなどの総合サイト

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。