0


0

vc6 dllからwstringを作成するときのポインタまたはリンクの問題

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

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

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

関数のプロトタイプがlibに入っていてもリンクしません…​

もう1つの発行者は、新しいUtfStringを作成し、アプリをデバッグすると、新しいポインターが `++`になることです。

VC6の `+ wstring `とVC9の ` wstring +`の競合が疑われますが、よくわかりません。 私は元のDLLを変更しないようにしたいです。

誰かが私にとって物事をより明確にし、問題の本当の理由は何かを私に説明することができればそれは素晴らしいでしょう。

ご回答ありがとうございます、Boris

1 Answer


2


ドントイベントトライ

文字列のレイアウトが異なります

それはできません。

文字列クラスはVC6とVC9の間で全く異なります。

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

VC9では、文字列は小さな文字列用の16バイトバッファと文字列s.t用のポインタである共用体を持っています。 size()> 15 VC9では、wstringには、小さい文字列の場合は8 wcharバッファ、文字列s.tの場合はポインタという和集合があります。 size()> 7

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

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

ごめんなさい