2010-10-30 36 views
8

Tôi mới sử dụng giao diện này có tên là DirectX. Tôi đang tìm một Giao diện DirectX từ một trò chơi nhất định và tôi đang sử dụng DirectX để Vẽ nội dung của riêng mình, như họa tiết và Phông chữ. Vấn đề của tôi là: Khi chương trình gọi chức năng Reset Hooked của thiết bị, tôi cần xóa tất cả mọi thứ khỏi bộ nhớ, giao diện Com. Nếu tôi không rõ, sau khi sự kiện Reset được gọi, Game chỉ cần thử tạo ra một bề mặt mới gọi d3dDierctx9Tạo nhưng lỗi của nó và chỉ tạo ra lỗi và đóng trò chơi.Làm thế nào để giải phóng một Giao diện?

Tôi nghĩ rằng tôi chỉ cần xóa tất cả mọi thứ trước khi Sự kiện đặt lại, được giải thích trên Msdn.

Trả lời

19

Bạn không giải phóng giao diện. Nó được tính toán và quản lý bởi trình biên dịch. Để nó nằm ngoài phạm vi, gán một giao diện khác cho biến, hoặc gán nil cho nó, và trình biên dịch sẽ tự động gọi phương thức _Release để nó có thể tự dọn sạch khi số tham chiếu giảm xuống 0.

+0

Vì vậy, với tài nguyên directx, bạn thường hoặc gọi 'onResetDevice' trên chúng nếu chúng hỗ trợ hoặc tạo lại chúng và gán lại cho biến Delphi. Điều đó sẽ tự động giải phóng tài nguyên ban đầu, như Mason đã nói ... _you chỉ cần thực sự cẩn thận để không giữ lại tài nguyên trong biến khác ở đâu đó, vì điều đó sẽ ngăn không cho tài nguyên bị giải phóng (tức là referenceCount> 0). Thường sử dụng một số loại đối tượng bao bọc để quản lý tài nguyên làm cho việc này dễ dàng hơn một chút. –

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