忍者ブログ
すずめと一緒に踊りませんか
ブログ内検索
話題ごと
WirelessFreedom
LinkStation (ls-gl)
イーサネットコンバータ
最新コメント
最新トラックバック
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
バーコード
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

       
さて、
前回、http://suzume.nemuly.net/Entry/14/で変な不具合のことを書いたわけですが、
C++とC#を組み合わせていたときにもう一つ不具合をば。
C#のexeを実行すると、
「追加情報: は有効な Win32 アプリケーションではありません。 (HRESULT からの例外: 0x800700C1)」
とかいう例外っぽいものを吐いて、
Application.Run(new Form1());

が終了する。
ネイティブコードの例外は、その前からちょくちょく投げられているらしいけれど、
Visual Studio に引っかかる例外はここ。

デバッガで追っていくと、
CLIで書いたマネージコードにアクセスをかける瞬間に例外が投げられるようだ。

なんか、
作られたCLIのDLLが破損しているとかフォーマットが不正だとか、そういうものらしい。

や、んなわけあるめぇ、Microsoft製のコンパイラが吐いたコードだぜ、
とか思うわけですが、
そんなこといっても何もはじまらず。
わっせわっせと地道に調べていくと、
boost::condition c;
c.wait(lock)

のようなコードがあると、dllが不正になるようだ。
このc.waitの一行だけをコメントアウトするだけで、なんか正常に実行できたりするわけなのだ。

はて、どういうことかの、とboostのコードを調べるなんてことは私には無理なので、
結局WIN32的なCriticalSectionで置き換えてしまったから、
詳細な原因は不明。
でもCLI的にはconditionは使わないほうが良いらしい、ということだけは学習した。
PR
       
■ この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
■ コメント一覧
■ この記事のトラックバック
この記事にトラックバックする:
回収命令 HOME ゲイツ語
Copyright © すずめのおどりあし All Rights Reserved
Powered by ニンジャブログ  Designed by ピンキー・ローン・ピッグ
忍者ブログ / [PR]