2011-12-28 4 views
1

나는 이러한 특성 사용하여 COM에 C# 클래스를 노출하고있어 결정 :상호 운용성 기능 발신자

공공 무효 shutdownService()

이 기능 : 나는 기능이이 클래스에서

[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.AutoDual)] 
[GuidAttribute("2325EBEB-DB5F-4D29-B220-64845379D9C5")] 
[ComSourceInterfaces(typeof(WrapperEvents))] 

을 COM Interop을 통해 VB6 클라이언트에서 한 번만 호출 할 수 있습니다. 모든 것이 잘 작동합니다. 그러나 어쨌든, 그것은 한 번 이상 부름 받았습니다. 내 C# 코드는이 함수를 직접 호출하지 않습니다. 그래서 문제는 VB6 코드에 있다고 생각합니다. 불행히도, 그것은 VB6 팀이 생각하는 것이 아닙니다. 이 함수의 호출자를 결정하는 방법이 있습니까? 내 C# 코드 또는 VB6 코드에서? LogStack의 유일한 라인이기 때문에

2011-12-23 08:28:40,067 1   DEBUG (null) LogStack: Service::shutdownService 

:

가 지금 내가 스택 트레이스 얻을 수있는 간단한 기능을 사용하고 있습니다 : 분명히

public void LogStack() 
    { 
     var trace = new System.Diagnostics.StackTrace(); 
     foreach (var frame in trace.GetFrames()) 
     { 
      var method = frame.GetMethod(); 
      if (method.Name.Equals("LogStack")) continue; 
      logger.Debug(string.Format("LogStack: {0}::{1}", 
       method.ReflectedType != null ? method.ReflectedType.Name : string.Empty, method.Name)); 
     } 
    } 

을, 나는 로그에 다음과 같이 뭔가를해야만있어 COM 노출 함수, 그것은 VB6에서 호출되고 있다고 가정합니다. 그러나 그것은 VB6 팀에 대한 충분한 증거가 아닙니다. 어떤 생각을 실제로 어떻게 기능을 증명할 수 있을까?

+0

VB6 팀에 로깅을 추가하도록 요청할 수 있습니까? – MarkJ

+0

그 대답은 .. "내 편이 좋다."VB6 앱은 개발자들을 너무 자주 잃어 버렸던 일종의 레거시 앱이다. 사람들이 다소 길을 잃어 버렸다. 나는 그것을 안다.하지만 그것을 대체하는 데 드는 비용 우리가 잡아 너무 높은 것입니다 .. – antony

+1

vb app shutdownService 어디서나 로깅을 추가하고 .net 코드 로깅을 유지하고 단순히 타임 스탬프와 일치시킬 수 있습니까? 절대적으로 알아야하는 경우 예외를 던져 의도적으로 호출자가 충돌하여 가시화되도록 할 수 있습니다. 정적 카운트를 유지하고> 1 (무언가를 한 번만 호출해야한다고 가정)이 예외를 throw합니다. compuware는 실행 중에 모든 활동을 기록한 truetime이라는 제품을 가지고있었습니다. 나는 더 이상 주위에 thats을 믿지 않는다. (plus는 thats를 가정하면서 클라이언트에 설치를 요구할 것이다.) –

답변

1

당신은 몇 가지를 시도 할 수 있습니다 :

  • 는, 디버거를 트리거 호출 스택을보고 코드에 중단 점을 설정합니다. 여기에서 Visual Studio에서 응용 프로그램을 덤프하여 보내거나 스택을 스크린 샷 할 수 있습니다.

ex. http://msdn.microsoft.com/en-us/library/d5zhxt22.aspx

참조와 Debugger.Break

http://www.netsplore.com/PublicPortal/blog.aspx?EntryID=12

덤프 "으로 Savre는 덤프" Visual Studio 6과 함께 설치되는 경우

+0

아, 실제로 우리 응용 프로그램을 실행하는 유일한 방법은 고객 사이트에서 실행하는 유일한 방법은 우리가 't 보유자. 그리고 거기에, 우리는 비주얼 스튜디오를 설치할 수 없습니다. 그것의 회사 정책. 그것은 정말로 내 손을 묶었습니다. COM이있는 곳에서 솔루션을 찾고 있습니다. 제가 제어 할 수있는 곳입니다. 링크를 주셔서 감사합니다. 어떤 아이디어가 나타나는지 먼저 확인해보십시오 :) – antony

+0

Windows 용 디버깅 도구를 설치하고 코드를 통해 덤프를 가져올 수 있습니까? 또한 stackwalker를 고려하고 관리되는 cpp 라이브러리를 호출하십시오. http://social.msdn.microsoft.com/Forums/en/netfxtoolsdev/thread/b05a9e86-c84b-42a7-a861-6c8e0e8cd40d –