Vì vậy, tôi làm việc trong clr, tạo dll .net trong hình ảnh C++.Làm thế nào để biến hệ thống :: String^thành std :: string?
Tôi trù mã như:
static bool InitFile(System::String^ fileName, System::String^ container)
{
return enc.InitFile(std::string(fileName), std::string(container));
}
có encoder mà normaly resives std :: string. nhưng ở đây trình biên dịch (visual studio) mang lại cho tôi lỗi C2664 nếu tôi loại bỏ các đối số từ std :: string và C2440 mà nói chung là như nhau. VS nói với tôi rằng nó chỉ có thể không chuyển đổi hệ thống :: String^thành std :: string.
Vì vậy, tôi buồn ... tôi phải làm gì để biến System :: String^thành std :: string?
Cập nhật:
Bây giờ với sự giúp đỡ của bạn tôi có mã như vậy
#include <msclr\marshal.h>
#include <stdlib.h>
#include <string.h>
using namespace msclr::interop;
namespace NSSTW
{
public ref class CFEW
{
public:
CFEW() {}
static System::String^ echo(System::String^ stringToReturn)
{
return stringToReturn;
}
static bool InitFile(System::String^ fileName, System::String^ container)
{
std::string sys_fileName = marshal_as<std::string>(fileName);;
std::string sys_container = marshal_as<std::string>(container);;
return enc.InitFile(sys_fileName, sys_container);
}
...
nhưng khi tôi cố gắng để biên dịch nó mang lại cho tôi C4996
lỗi C4996: 'msclr :: interop :: error_reporting_helper < _To_Type, _From_Type> :: marshal_as ': Chuyển đổi này không được thư viện hoặc tệp tiêu đề cần thiết cho chuyển đổi này không được bao gồm. Vui lòng tham khảo tài liệu về 'Cách: Mở rộng Thư viện Marshaling' để thêm phương thức marshaling của riêng bạn.
phải làm gì?
Bạn đã bao gồm 'msclr \ marshal.h'. Hãy thử 'msclr \ marshal_cppstd.h'. –
@ Chris Schmich: cảm ơn bạn - bây giờ nó biên dịch hoàn hảo =) – Rella