0

VC6 で生成された DLLwstringを使用して、VC9 プロジェクトで使用しようとしています。この DLL にはwstring、 と呼ばれるを操作する上位レベルのクラスがありUtfStringます。

プロジェクトにすべてが正しくインポートされましたが、呼び出すと:

std::wstring test;
UtfString uTest(test);

関数プロトタイプがライブラリにある場合でも、リンクしません...

もう 1 つの発行者は、新しい UtfString を作成し、アプリをデバッグすると、新しいポインタが<Bad Ptr>.

wstringVC6と VC9の競合が疑われますが、よくわかりwstringません。元の Dll を変更することは避けたいです。

誰かが私のために物事をより明確にし、問題の本当の理由が何であるかを説明してくれれば素晴らしいと思います.

回答ありがとうございます、ボリス

4

1 に答える 1

2

試してはいけない

弦の配置が違う

あなたはそれをすることはできません。

文字列クラスは VC6 と VC9 でまったく異なります。

リンクできたとしても、おそらくクラッシュします。

VC9 の文字列には、小さな文字列用の 16 バイト バッファと文字列 st size()>15 用のポインタであるユニオンがあります。VC9 では、wstring には、小さな文字列用の 8 wchar バッファーと、文字列 st size()>7 用のポインターであるユニオンがあります。

VC6 では、すべての文字列バッファー領域がヒープに割り当てられます。

境界を越えて文字列を渡す場合は、DLL を再コンパイルする必要があります。ここで説明するには技術的すぎるイテレータに関する他の問題もあります。

すいません、作り直します

于 2009-07-24T05:32:46.727 に答える