Làm cách nào để chuyển đổi Hệ thống (.net) C++\CLI
String^
thành chuỗi MFC C++ LPCTSTR
.C++ Hệ thống CLI.Đổi^đến MFC LPCTSTR
Rất dễ dàng để có được một LPCTSTR
vào String^
, nhưng cho đến nay không tìm thấy gì khi thực hiện theo cách khác.
Làm cách nào để chuyển đổi Hệ thống (.net) C++\CLI
String^
thành chuỗi MFC C++ LPCTSTR
.C++ Hệ thống CLI.Đổi^đến MFC LPCTSTR
Rất dễ dàng để có được một LPCTSTR
vào String^
, nhưng cho đến nay không tìm thấy gì khi thực hiện theo cách khác.
Nếu bạn có Visual Studio 2008 hoặc cao hơn, bạn sẽ có thể làm điều này bằng cách sử dụng thư viện C++/CLI marshaling, như vậy:
#include <msclr\marshal.h>
using namespace System;
using namespace msclr::interop;
...
String^ cliString;
marshal_context context;
LPCTSTR cstr = context.marshal_as<const TCHAR*>(cliString);
Thông tin thêm về marshaling giữa các loại trên MSDN: Overview of Marshaling in C++
Tại sao không sử dụng LPCTSTR tstr = context. marshal_as
Tôi đã đưa bạn lên trên ý tưởng hợp lý của bạn, mà vì lý do nào đó đã trượt tâm trí của tôi. Cảm ơn! –
Sự khác biệt giữa nguyên soái này so với nguyên soái trong câu trả lời khác là gì? –
Bạn có thể muốn thử Marshal::StringToHGlobalUni, Marshal::StringToHGlobalAuto hoặc Marshal::StringToHGlobalAnsi.
Hãy nhớ rằng các chuỗi không được quản lý được phân bổ sẽ cần phải được giải phóng với Marshal::FreeHGlobal.
lưu ý rằng LPCTSTR chỉ là một con trỏ char, vì vậy có thể bạn muốn chuyển đổi chuỗi thành chuỗi CString hoặc std :: và sau đó lấy con trỏ để bạn không phải xử lý việc quản lý bộ nhớ – stijn