2009-07-24 50 views
0

我得到了一个在VC6上生成的DLL,使用wstring,我试图在VC9项目中使用它。 在这个DLL中有一个更高级的类操作wstring,被称为UtfString当从vc6创建wstring时,指针或链接不良问题

我把一切都在我的项目正确导入,但是当我打电话:

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

它不会链接,即使该函数的原型是在lib ...

其他发行当创建一个新的UtfString并调试我的应用程序时,新指针是<Bad Ptr>

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

如果有人能够让我的事情变得更加清晰,并且解释我问题的真正原因是什么,那将是非常棒的。

预先感谢您的回答, 鲍里斯

+0

我期望链接到不同运行时的dll几乎不兼容是。什么是错误?什么指针? – Eugene 2009-07-24 02:33:58

+0

另外,请检查您的“将wchar_t视为内置类型”设置。 – Eugene 2009-07-24 02:34:55

回答

2

DONT甚至尝试

字符串布局不同

你不能做到这一点。

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

即使你能够链接你很可能会崩溃。

在VC9字符串中有一个联合,它是16字节的小字符串缓冲区和一个字符串s.t.的指针。尺寸()> 15。 在VC9中,wstrings具有8个用于小字符串的wchar缓冲区和用于字符串s.t的指针的联合。尺寸()> 7。

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

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

对不起,我得重建