bao gồm "stdafx.h"
#include <string>
#include <msclr/marshal_cppstd.h>
ref class Test {
System::String^ text;
void Method() {
std::string f = msclr::interop::marshal_as<std::string>(text); // line 8
}
};
Mã này khi biên soạn với VS2008 cho:marshal_as, dây và các lĩnh vực so với tính
.\test.cpp(8) : error C2665: 'msclr::interop::marshal_as' : none of the 3 overloads could convert all the argument types
f:\programy\vs9\vc\include\msclr\marshal.h(153): could be '_To_Type msclr::interop::marshal_as<std::string>(const char [])'
with
[
_To_Type=std::string
]
f:\programy\vs9\vc\include\msclr\marshal.h(160): or '_To_Type msclr::interop::marshal_as<std::string>(const wchar_t [])'
with
[
_To_Type=std::string
]
f:\Programy\VS9\VC\include\msclr/marshal_cppstd.h(35): or 'std::string msclr::interop::marshal_as<std::string,System::String^>(System::String ^const &)'
while trying to match the argument list '(System::String ^)'
Nhưng khi tôi thay đổi lĩnh vực này vào bất động sản:
property System::String^ text;
thì mã này sẽ biên dịch mà không có lỗi. Tại sao?
Dường như không được sửa trong VS2010 (ít nhất, nó không hoạt động trong mã của tôi) nhưng giải pháp thay thế cho tôi. Cảm ơn! – Paul
Không hoạt động trong mã của tôi, nhưng cách giải quyết này cũng cố định của tôi. Cảm ơn! – casper
Thật vậy, chưa được khắc phục và xảy ra trong các tình huống khác như các phần tử mảng được quản lý marshaling: marshal_as (arrayOfSystemStrings [i]). Giải pháp thay thế là tạo một biến trung gian giả: System :: String^dummy = arrayOfSystemStrings [i]; std :: string s = marshal_as (giả); –
Pragmateek