3

在非托管 c++ dll 中,我有一个以常量std::string为参数的函数

 Prototype : void read ( const std::string &imageSpec_ )

我通过传递一个std::string.
当我调试非托管 c++ 代码时,参数imageSpec_正确显示值,但不允许我将该值复制到其他变量中。

 imageSpec_.copy( sFilename, 4052 );

它显示长度imageSpec_ 为 0(零)。
如果我尝试像std::string sTempFileName(imageSpec_);这个语句字符串一样复制新字符串是一个空字符串。

但是对于std::string sTempFileName(imageSpec_.c_str());这个语句字符串被正确复制。即带有字符指针的字符串被正确复制。

以这种方式复制将需要对非托管 c++ 代码进行重大更改。
我在 Visual Studio 6.0 中构建非托管代码,在 Visual Studio 2008 中构建托管 c++。托管 c++ 中
是否有任何特定设置或代码更改可以解决该问题?

4

1 回答 1

1

我在 Visual Studio 6.0 中构建非托管代码,在 Visual Studio 2008 中构建托管 C++。

您正在尝试将std::stringVisual Studio 6.0 的实现复制到std::stringVisual Studio 2008 的实现中。如果您想跨 DLL 边界传递 C++ 对象,您必须非常小心 - 您必须使用完全相同的对象构建边界的两侧布局(特定于编译器)和库实现,并针对兼容的运行时构建它们。

如果您想创建一个 .dll,该 .dll 可以从使用与该 .dll 不同的编译器/库编译的代码中使用,那么纯 C 接口是可行的方法。


请参阅相关问题。

于 2010-03-12T15:17:58.430 回答