2010-03-12 51 views
3

在非托管C不能访问++ DLL我有一个功能,这需要不断std::string作为参数托管C++的std :: string在非托管C++

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

我传递一个std::string调用从托管C++ DLL此功能。
当我调试非托管的c + +代码参数imageSpec_显示正确的值,但不允许我复制该值在其他变量。

imageSpec_.copy(sFilename, 4052); 

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

但是对于std::string sTempFileName(imageSpec_.c_str());此语句字符串被正确复制。即用charpointer字符串被正确复制。

复制这种方式将需要非托管C++代码的重大变化。
我正在Visual Studio 6.0中构建非托管代码,并在Visual Studio 2008中管理C++。
托管C++中是否有任何特定设置或代码更改可解决此问题?

+0

它是“托管C++”还是C++/CLI? – xyz 2010-03-12 15:08:00

+0

你确定支持混合使用VC++ 6.0和VC++ 2008对象吗? – AProgrammer 2010-03-12 15:12:54

回答

1

我建立非托管代码在Visual Studio 6.0和Visual Studio 2008中

您正试图将std::string执行的Visual Studio 6.0复制到std::string implmentation的Visual Studio 2008的托管C++ 。如果你想跨DLL边界传递C++对象,你必须非常小心 - 你必须使用完全相同的对象布局(这是编译器特定的)和库实现来构建边界的两侧,并根据兼容的运行时构建它们。

如果您想要创建一个可从使用该.dll中的不同编译器/库编译的代码中使用的.dll,则需要纯C接口。


this相关的问题。