2012-03-20 9 views
9

Làm cách nào để chuyển đổi Hệ thống (.net) C++\CLIString^ 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.

+1

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

Trả lời

13

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++

+0

Tại sao không sử dụng LPCTSTR tstr = context. marshal_as (cliString) và để môi trường xây dựng xử lý kiểu chuỗi thực tế? – TeaWolf

+0

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! –

+0

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ì? –