Gần đây tôi đã có một lỗi mà chỉ biểu hiện chính nó khi thư viện được xây dựng dưới dạng bản dựng phát hành chứ không phải là bản dựng gỡ lỗi. Thư viện là một dll .NET với một trình bao bọc COM và tôi đang sử dụng CoCreateInstance để tạo một lớp từ dll trong một ứng dụng C++ không được quản lý. Khi tôi cuối cùng đã theo dõi lỗi xuống nó được gây ra bằng cách truy cập một đối tượng singleton. Tôi đã dụ singleton tuyên bố như vậy:Sự khác biệt trong những cách tạo ví dụ tĩnh cho một singleton là gì?
private static readonly MyObjectType s_instance = new MyObjectType;
và sau đó truy cập nó với:
public static MyObjectType Instance
{
get
{
return s_instance;
}
}
này đã thất bại. Thay đổi nó thành:
private static MyObjectType s_instance;
public static MyObjectType Instance
{
get
{
if (s_instance==null)
{
s_instance = new MyObjectType();
}
return s_instance;
}
}
khắc phục sự cố. Bất kỳ ý tưởng tại sao việc sử dụng ban đầu không hoạt động và nếu có bất kỳ nhược điểm nào để thực hiện nó theo cách nào?
Dll phát hành dường như hoàn toàn có thể sử dụng được từ một ứng dụng được quản lý khác.
Lỗi này tự hiển thị như thế nào? Nó đã sụp đổ? Có thông báo lỗi không? –
Cuộc gọi đến CoCreateInstance vừa trả lại 'ClassNotRegistered' mỗi lần. Nhưng chỉ trong một xây dựng relaese. trong một debug xây dựng mọi thứ hoạt động tốt. –
Khắc phục của bạn không phải là chủ đề an toàn. – Joe