2011-10-07 44 views
13

Tôi nhận được cảnh báo lạ trong Visual Studio 2008 khi biên dịch ứng dụng C# ASP.NET. Bất cứ ai có thể chỉ cho tôi một lời giải thích (bằng lời của vài âm tiết, nếu có thể) những gì cảnh báo này có nghĩa là gì?Điều gì "không thể được so sánh bởi trình so khớp thời gian" nghĩa là gì?

Ít nhất một trong các đối số cho 'IasHelper.Process' không thể là được so khớp bởi trình so khớp thời gian chạy. Vì vậy, các đối số như vậy sẽ là được truyền dưới dạng con trỏ và có thể yêu cầu mã không an toàn để thao tác.

Trả lời

9

Lớp Marshal chịu trách nhiệm chuyển đổi mã/lớp không được quản lý thành các lớp được quản lý và ngược lại. Xem the msdn documentation of the Marshal Class.

Nếu bạn bao gồm một số lắp ráp interop để truy cập đối tượng COM hoặc như vậy nó có thể xảy ra rằng Marshal (l) er không thể chăm sóc hoạt động. Vì vậy, bạn có phần không được quản lý chạy trong chương trình của bạn mà lần lượt có thể gây ra những điều khó chịu như tràn bộ đệm và như vậy. Do đó bạn rời khỏi thế giới an toàn, ấm cúng của mã được quản lý và bước vào cõi nguy hiểm, nguy hiểm của C/C++ và những anh em đáng sợ của họ. :-)

+1

Cảm ơn bạn. Đó là tài liệu tham khảo liên kết đến (http://justlikeamagic.com/2010/03/09/marshaling/) đó là toàn diện. –

7

Có vẻ như bạn đang tham chiếu một đối tượng ActiveX và nó cho tlbimp.exe một thời gian khó khăn so khớp các đối số của một số phương thức và cấu trúc thành viên giữa COM và .NET.

điều này có thể xảy ra trong quá trình xây dựng sạch vì đó là thời gian duy nhất tlbimp phải chạy. cố gắng làm một công trình bình thường nơi bạn không làm sạch trước.

+0

Cảm ơn vì điều đó. Tôi vừa vấp phải chủ đề này (http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/92cc0495-729b-40be-a49c-00676c21b8e3) trong đó một người có cùng vấn đề. Thay vào đó đáng lo ngại, phải không? –

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