【【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のマクロの使用には注意する必要があるという教訓になりました。
現在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のマクロの使用には注意する必要があるという教訓になりました。