2013-11-15 3 views
0

나는이 함께 할 수 있지만, 무엇을 정말 확실하지 기본적으로 내가 데스크탑 회계 시스템을 통해와 정보를 교환하는 시스템을 개발 한 사람이포스 과정은 COM 개체가 소멸 될 때 닫습니다

을 도울 수있을 것으로 기대 COM 인터페이스

나는 내가

Dim myObject as New AccountingLibraryType 

이 그때 나에게 가시에 액세스 할 수 있습니다 새 인스턴스를 만들 내 코드에 다음 내 .NET 프로젝트에 COM 라이브러리에 대한 프로젝트 참조를 추가 한 적이 무엇 프로퍼티, 프로 시저 및 함수 등

myObject.Login("Login details go here") 

내 개체의 인스턴스에서 작업을 완료 할 때

내 문제가 시작 모두가 잘 작동이 부분. 아무리 내가 뭘 나는 자주 나는 내가 심지어 프로세스가 계속 내 윈도우 작업 관리자에서 실행 남아있는 모든 후

myObject.Logout 'As per Accounting software developers, should close process 
GC.Collect() 
Marshel.ReleaseComObject(myObject) ' Also tried Marshal.FinalReleaseComObject(myObject) 
myObject = Nothing 

다음을 수행 내 객체를 폐기있을 때 프로세스가 여전히

을 실행으로 끝날 없습니다.

ProgID로 프로세스를 조사했지만 불행히도 일반적으로 최종 사용자가 일반적으로 회계 소프트웨어에서 직접 작업 할 것이므로 올바른 프로세스를 얻을 수있는 방법이 없습니다.

내가 볼 수있는 한, com 개체에는 프로세스를 식별 할 수있는 것이 없습니다. 내가 속성 컬렉션을 얻을 수 있지만, 다시

Dim attributes As AttributeCollection 
attributes = TypeDescriptor.GetAttributes(GetType(AccountingLibraryType)) 

그래서 먼저 올바른 프로세스에 그에서 얻을 어쨌든 표시되지 않습니다 발견, 나는 과정을 보장하기 위해 일을 할 수있는 뭔가가 완전히 거기인가 내가 끝낼 때 폐업했다.

두 번째로, 프로세스의 핸들을 얻을 수있는 객체 인스턴스를 만들 수 있지만 더 좋은 방법은 보이는 속성과 메소드에 대한 액세스 권한을 유지하는 것이다. 나는 프로세스와 StartInfo를 살펴 봤지만 필요한 메소드 등을 얻는 방법을 실제로 볼 수 없었다.

회계 소프트웨어의 경우 내부 가비지 수집에 문제가 있다고 생각된다. 나는 이것에 대해 여러 번 이야기했지만, 그것에 관해서는 아무 것도하지 않습니다. - 그래서 그들을 파괴하는 경우도 있습니다

Marshal.FinalReleaseComObject(myObject) 
myObject = Nothing 
GC.Collect() 
GC.WaitForPendingFinalizers() 
GC.Collect() 

가 파괴 될 필요가 자식 COM 개체가 없는지 확인하기 :

여기

+0

내가 말한 경우라면, IDisposable을 구현하는 내 자신의 래퍼 클래스를 작성해야합니다. Sub Dispose에서 개체 참조를 정리합니다. – Hursey

답변

0

이 당신을 위해 무엇을 찾고있는 어떤 도움을 주셔서 감사합니다 역순으로.

+0

슈퍼 빠른 답장을 보내 주셔서 감사합니다. 귀하의 지침에 따라 내 정리 코드가 변경되었습니다. – Hursey

+0

하위 COM 객체를 식별하는 확실한 방법은 무엇입니까? – Hursey

+0

찾을 수 있습니다, 당신은 정확히 어디 오른쪽으로 자식 개체.SQL 질의를 전달하는 함수가 있는데, com 객체의 형태로 데이터 세트를 반환합니다. – Hursey

관련 문제