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?
Đó 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! :) –
Đó 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. –
@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 :) –