2010-03-12 6 views
3

В неуправляемом C++ DLL У меня есть функция, которая принимает постоянное std::string в качестве аргументаManaged C++ станд :: строка не доступна в неуправляемом C++

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

Я называю эту функцию из С DLL управляемом ++ пропусканием std::string.
Когда я отлаживаю неуправляемый код C++, параметр imageSpec_ показывает значение правильно, но не позволяет мне копировать это значение в другую переменную.

imageSpec_.copy(sFilename, 4052); 

Он показывает длину imageSpec_ как 0 (ноль).
Если я пытаюсь копировать, как std::string sTempFileName(imageSpec_);, эта строка оператора new string является пустой строкой.

Но для std::string sTempFileName(imageSpec_.c_str()); эта строка инструкции копируется правильно. т. е. с символьной строкой копируется правильно.

Копирование этого способа потребует значительного изменения неуправляемого кода на C++.
Я создаю неуправляемый код в Visual Studio 6.0 и управляемый C++ в Visual studio 2008.
Есть ли какой-либо конкретный параметр или изменение кода в управляемом C++, который решит проблему?

+0

Является ли это «Управляемый C++» или C++/CLI? – xyz

+0

Вы уверены, что поддерживаются смешение объектов VC++ 6.0 и VC++ 2008? – AProgrammer

ответ

1

Я строю неуправляемого кода в визуальной студии 6.0 и Managed C++ в Visual Studio 2008.

Вы пытаетесь скопировать std::string реализацию Visual Studio 6.0 в std::string implmentation в Visual Studio 2008 Если вы хотите передать объекты C++ через границы DLL, вы должны быть очень осторожны - вы должны построить обе стороны границы, используя точно такой же макет объекта (который является специфичным для компилятора) и реализацию библиотеки, и построить их против совместимых сред выполнения.

Если вы хотите создать DLL-версию, которая может быть использована из кода, скомпилированного с использованием другого компилятора/библиотеки из этой .dll, это чистый способ C-интерфейса.


См. this Связанный вопрос.

 Смежные вопросы

  • Нет связанных вопросов^_^