Làm thế nào để bạn buộc Excel (2007) VBA phát hành tham chiếu đến đối tượng máy chủ COM?Cách phát hành đối tượng COM Server inprocess từ Excel VBA
Tôi đã viết một máy chủ COM inprocess (Single instance DLL) trong Visual Foxpro 9 SP2 được khởi tạo từ mã Excel 2007 VBA trên máy phát triển của tôi. Excel có vẻ đang giữ một tham chiếu đến đối tượng COM/dll ngay cả khi tôi đặt nó = Không có gì. Điều này ngăn cản tôi xây dựng lại DLL do một "Truy cập tập tin bị từ chối TestCOM.dll" tin nhắn cho đến khi tôi thoát khỏi Excel mà là một nỗi đau mỗi khi tôi muốn thực hiện một sự thay đổi và thử nghiệm nó.
Tôi đã luộc mã xuống để thiết lập thử nghiệm rất đơn giản: Dự án VFP9 (TestCOM) có chỉ là một tập tin .prg với các nội dung sau
DEFINE CLASS TestClass As Session OLEPUBLIC
ENDDEFINE
Bộ luật VBA như sau:
Sub Test()
Set objTest = CreateObject("TestCOM.TestClass")
Set objTest = Nothing
End Sub
Tôi đã thử xóa tham chiếu đến thư viện máy chủ COM trong dự án VBA nhưng điều này không tạo ra bất kỳ sự khác biệt nào. Tôi đã thử và không có DIMing các biến đối tượng và nó không có sự khác biệt. Tôi đã thử tạo một dự án VFP DLL mới nhưng vấn đề vẫn tồn tại.
Nếu tôi xây dựng ứng dụng VFP/dll như là một INPROCESS/DLL và chạy mã VBA tôi nhận được vấn đề này nhưng nếu tôi xây dựng nó như là một OUTOFPROCESS/EXE và chạy mã VBA tôi không nhận được vấn đề này.
Tôi tìm thấy một vấn đề rất giống nhau trong COM Object Cleanup ngoại trừ máy chủ COM của tôi được viết bằng Visual Foxpro 9 SP2 trong khi đó có liên quan đến C# và OP không giải thích chi tiết cách họ giải quyết vấn đề vì vậy tôi không biết cách đi xung quanh nó; nếu điều đó thậm chí còn có thể.
Đối với bất kỳ người khác đọc chủ đề này sau đó tôi đã nhận ra rằng nếu dự án được xây dựng như một ra khỏi quá trình (EXE) COM Server thì bạn chỉ có thể xây dựng lại dự án mà không bỏ Excel nếu bạn không có tham chiếu đến thư viện kiểu trong VBA/Excel. – Caltor