나는 이러한 특성 사용하여 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 팀에 대한 충분한 증거가 아닙니다. 어떤 생각을 실제로 어떻게 기능을 증명할 수 있을까?
VB6 팀에 로깅을 추가하도록 요청할 수 있습니까? – MarkJ
그 대답은 .. "내 편이 좋다."VB6 앱은 개발자들을 너무 자주 잃어 버렸던 일종의 레거시 앱이다. 사람들이 다소 길을 잃어 버렸다. 나는 그것을 안다.하지만 그것을 대체하는 데 드는 비용 우리가 잡아 너무 높은 것입니다 .. – antony
vb app shutdownService 어디서나 로깅을 추가하고 .net 코드 로깅을 유지하고 단순히 타임 스탬프와 일치시킬 수 있습니까? 절대적으로 알아야하는 경우 예외를 던져 의도적으로 호출자가 충돌하여 가시화되도록 할 수 있습니다. 정적 카운트를 유지하고> 1 (무언가를 한 번만 호출해야한다고 가정)이 예외를 throw합니다. compuware는 실행 중에 모든 활동을 기록한 truetime이라는 제품을 가지고있었습니다. 나는 더 이상 주위에 thats을 믿지 않는다. (plus는 thats를 가정하면서 클라이언트에 설치를 요구할 것이다.) –