Tôi có một C# DLL và một Visual Basic 6 DLL.C# Số thập phân cho VB6 Tiền tệ
Trong C# có trường x có loại dữ liệu Thập phân. Trong VB6 có một trường y với kiểu dữ liệu Đơn vị tiền tệ.
Cách tốt nhất để chuyển x thành y và quay lại là gì?
Hiện tại tôi chuyển đổi các trường thành Đúp, nhưng tôi không chắc chắn nếu có ý nghĩa làm tròn.
Cập nhật 1:
Dựa trên những lời khuyên hữu ích này là những gì mã của tôi trông bây giờ:
public void FromVbToNet(long vb6curr)
{
decimal value = vb6curr/10000;
}
Vấn đề là, khi tôi cố gắng gọi này từ VB6 qua interop, tôi nhận được một biên dịch lỗi:
"Chức năng hoặc giao diện được đánh dấu là bị hạn chế hoặc chức năng sử dụng loại Tự động hóa không được hỗ trợ trong Visual Basic"
Vậy làm cách nào để khai báo vb6curr? Chuỗi, Đối tượng, Động?
Cập nhật 2:
Trong trường hợp bất cứ ai cần này để tham khảo, sau khi đọc thêm tôi đã đưa ra các giải pháp sau đây:
[return: MarshalAs(UnmanagedType.Currency)]
public decimal GetDecimalFromNetDll()
{
decimal value = ... // Read from database
return value;
}
public void SetDecimalInNetDll([MarshalAs(UnmanagedType.Currency)] decimal value)
{
// Save to database
}
tôi gọi đó là các từ mã không được quản lý của tôi trong VB6 với một Đơn vị tiền tệ và mọi thứ dường như hoạt động cho đến thời điểm này.
Xin lỗi Tôi thực sự lúng túng ở đây. Tôi đã thử một biến dài (int64), nhưng điều đó không được hỗ trợ bởi VB6. Giải pháp duy nhất tôi thấy là làm tròn số thập phân đến gấp đôi, vì double là kiểu 64 bit duy nhất mà VB6 biết. Tôi có đúng không? –
Ở phía VB6, sử dụng 'Tiền tệ'. Ở phía C#, sử dụng 'long'. Quy mô giá trị bằng '10.000' trong mã C# khi chuyển đổi giữa' thập phân' và 'dài'. –