SE=ぱそこんのお仕事の日々~常に定時帰りを目指すSEのブログ~

残業の日々を過ごすSEの気になった日常やシステム開発についての覚書のようなブログ

【VC++】のBSTR⇒LPCSTR変換ではまる

2006-04-16 10:59:55 | VC++/DB2/etc
【【VC++】のBSTR⇒LPCSTR変換ではまる】
現在Microsoft Visual Stadio .Net VC++でPGを作成しています。

BSTR型のデータをLPCSTRに変換する際、OLE2CTを使用した常駐バッチが処理を何度も繰り返すと落ちる(スタックオーバーフロー)という状況に陥りました。

【PGが何度も落ちる際のコーディング(OLE2CT使用)】<
 
  LPCSTR lpWkBuf;
BSTR bsWkBuf;

  USES_CONVERSION;         // OLE2CT に必要
  lpWkBuf = OLE2CT(bsWkBuf);

【PGが落ちなくなった際のコーディング(OLE2CT未使用)】<

  LPCSTR lpWkBuf;
BSTR bsWkBuf;
 _bstr_t bstBuf; /* BSTR⇒LPCSTR変換用バッファ */

 bstBuf=bsWkBuf;
 lpWkBuf = (char *)bstBuf;

OLE2CTは、alloca でスタック上にメモリを確保しているようです。
なので常駐系のバッチではスタック上のメモリを使いまくって落ちていると。。。
MFCのマクロの使用には注意する必要があるという教訓になりました。