2010-05-31 33 views
9

Tôi đang cố gọi một phương thức được viết bằng C++/CLI từ C#. Mã C++/CLI được sử dụng để cập nhật cột TIMESTAMP trong cơ sở dữ liệu Oracle, được cung cấp ID bản ghi và đối tượng System::DateTime là loại dữ liệu tương thích .NET cho loại TIMESTAMP của Oracle.Gọi phương thức C++/CLI với hệ thống :: Tham số DateTime yêu cầu 'ValueType' làm tham số?

Phương pháp tôi kêu gọi có các mẫu sau:

bool ChangeJobUpdateDate (int jobIdIn, System::DateTime^ updateDateIn) 

Tôi đã thêm một tham chiếu đến dự án DLL này trong một dự án thử nghiệm mà tôi đã thực hiện; Tôi đang viết các bài kiểm tra trong C#. Tuy nhiên, khi tôi cố gắng gọi phương pháp này từ C# dự án thử nghiệm đơn vị, chức năng dường như có việc kê khai theo phương pháp (thông qua IntelliSense):

bool ChangeJobUpdateDate (int jobIdIn, ValueType updateDateIn) 

Tôi phải thừa nhận là không phải là quen thuộc với C++/CLI, vì vậy có cái gì tôi đang mất tích?

Trả lời

11

Tôi nghi ngờ đó là vì bạn đang sử dụng DateTime^ thay vì chỉ DateTime. Đó là một loại giá trị, vậy tại sao bạn lại cố gắng sử dụng một tham chiếu?

C# không có cách nào đại diện cho loại tham chiếu được liên kết với loại giá trị, vì vậy tốt nhất có thể làm là ValueType - I nghi ngờ đó là những gì đang xảy ra, mặc dù tôi không thể chắc chắn do sự thiếu kinh nghiệm của tôi với C++. Hãy thử chỉ DateTime và xem cách hiển thị ...

+1

Đó là nó! Có vẻ như tôi sẽ cần dành thêm một chút thời gian để đọc ý nghĩa của các ký hiệu ^% & * ing này. Cảm ơn! :) –

+3

Đó là khá nhiều. C++/CLI thực sự mã hóa kiểu thực của giá trị thành chữ ký - trong trường hợp này, trong IL, kiểu hoàn chỉnh sẽ là: 'class [mscorlib] System.ValueType modopt ([mscorlib] System.DateTime) modopt ([mscorlib System.Runtime.CompilerServices.IsBoxed) '- đó là cách trình biên dịch C++/CLI sau này biết đúng loại và sẽ thực hiện đánh máy đúng - nhưng C# chỉ bỏ qua tất cả' modopt' và xử lý nó như là một 'ValueType' đơn giản. –

+0

@Pavel: Cảm ơn bạn đã biết chi tiết. Tôi đã thực sự chỉ thực hiện một dự đoán giáo dục. Cảm thấy tự do để chỉnh sửa tất cả lòng tốt này vào câu trả lời của tôi - hoặc thêm của riêng bạn :) –

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