Tôi có một dll xuất một chức năng trả về Giao diện.Làm cách nào để đảm bảo phiên bản Giao diện được giải phóng trước khi FreeLibrary được gọi là
Tôi đã tạo trình bao bọc cho các hàm LoadLibrary, GetProcAddress và FreeLibrary được sử dụng để gọi hàm đã xuất.
TInterfaceGetter = class
private
...
public
constructor Create;
destructor Destroy; override;
function GetInterface: IMyInterface;
end;
Trình bao bọc này sẽ tải xuống dll và lưu giữ xử lý mô đun và địa chỉ proc của hàm được xuất khi GetInterface được gọi lần đầu tiên. Các cuộc gọi đến FreeLibrary xảy ra trong destructor của wrapper.
Mọi thứ hoạt động tuyệt vời trừ khi mã máy khách treo vào tham chiếu giao diện sau khi giải phóng trình bao bọc. Khi tham chiếu giao diện cuối cùng đi ra ngoài phạm vi kết quả cuộc gọi đến _IntfClear làm tăng một sự vi phạm truy cập vì dll cũng như bất kỳ bộ nhớ nó đã sử dụng đã được dỡ xuống từ không gian bộ nhớ của khách hàng.
Tôi có thể xử lý điều này một cách duyên dáng như thế nào? Làm thế nào để thực thi COM toàn diện xử lý kịch bản này?