2010-10-22 32 views
24

Tôi đang cố gắng sử dụng thư viện marshalling trong dự án C++/CLI của tôi. Khi được biên soạn với #include <msclr/marshal.h> tôi gặp lỗi error C2872: 'IServiceProvider' : ambiguous symbol. Hầu hết các độ phân giải dường như đang đề xuất di chuyển #include <windows.h> như hình ảnh ở đây ->Ambiguous references, nhưng tôi không có những thứ đó bao gồm. Tất cả những gì tôi có là:Vấn đề trong biên dịch với marshal.h: lỗi C2872: 'IServiceProvider': biểu tượng mơ hồ

using namespace System; 
using namespace System::Configuration; 
using namespace std; 
#include <msclr/marshal.h> 

Làm cách nào để gỡ lỗi vấn đề này?

Trả lời

40

Bạn làm, gián tiếp, marshal.h bao gồm nó. Nó đổ một số lượng lớn các mã định danh trong không gian tên chung. Các macro đặc biệt khó xử, rất nhiều trong số chúng khớp với tên được sử dụng trong khung công tác.

Rất nhiều thứ mà marshal.h cũng có thể được thực hiện bởi lớp Marshal. Nhưng tôi không thể giúp bạn với điều đó, bạn đã không đề cập đến lý do tại sao bạn muốn sử dụng nó. Bạn có thể giải quyết rủi ro đặc biệt này bằng cách đặt câu lệnh #include trước những điều khoản sử dụng:

#include <msclr/marshal.h> 
using namespace System; 
using namespace System::Configuration; 
+0

Tôi đang cố gắng chuyển đổi Chuỗi^thành const char * – anivas

+4

Nguyên soái :: StringToCoTaskMemAnsi + Marshal :: FreeCoTaskMem. –

+0

Cũng có thể sử dụng Hệ thống :: Chuỗi^để tránh sử dụng tiêu đề – slater

2

Hãy chắc chắn rằng bạn chỉ có:

using namespace System; 

trong file cpp của dự án CLR và không trong tiêu đề. Visual studio tự động thêm nó vào tiêu đề khi tạo dự án thư viện lớp CLR. Trong chính cpp, phần bao gồm phải đặt trước "không gian tên đang sử dụng".

Các vấn đề liên quan