0

我在 VC6 上生成了一个 DLL 并使用wstring,我正在尝试在 VC9 项目中使用它。在这个 DLL 中有一个更高级别的类操作wstring,称为UtfString.

我在我的项目中正确导入了所有内容,但是当我打电话时:

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

即使函数原型在库中,它也不会链接...

另一个问题是,当创建一个新的 UtfString 并调试我的应用程序时,新指针是<Bad Ptr>.

wstring我怀疑 VC6和 VC9之间存在冲突,wstring但我不确定。我想避免修改原始 Dll。

如果有人可以让我更清楚,并向我解释问题的真正原因是什么,那就太好了。

提前感谢您的回答,鲍里斯

4

1 回答 1

2

不要尝试

字符串布局不同

你不能那样做。

VC6 和 VC9 之间的字符串类完全不同。

即使您能够链接,您也很可能会崩溃。

在 VC9 中,字符串有一个联合,它是用于小字符串的 16 字节缓冲区和一个用于字符串 st size()>15 的指针。在 VC9 中,wstrings 有一个联合,即 8 个 wchar 缓冲区用于小字符串和一个用于字符串 st size()>7 的指针。

在 VC6 中,所有字符串缓冲区空间都分配在堆上。

如果跨边界传递字符串,则必须重新编译 DLL。还有其他关于迭代器的问题,技术性太强,无法在此处描述。

抱歉得重建

于 2009-07-24T05:32:46.727 回答