vb6 클라이언트가있는 C#에서 COM 서버를 구현했습니다.C# - COM 서버 작성 - 클라이언트에서 발생하지 않는 이벤트
이벤트를 발생 시키면 핸들러는 항상 null입니다. vb6 앱이 내 이벤트를 구독하지 않는 것처럼 보입니다.
vb6 응용 프로그램은 기존 타사 응용 프로그램이며 오류 메시지를 표시하지 않는 것으로 보입니다.
일반적인 방법은 COM 클라이언트 -> 서버에서 정상적으로 작동합니다.
무슨 일이 일어나고 있는지 디버깅하기 위해 할 수있는 일이 있습니까? 또는 왜 내 행사가 효과가 없습니까?
여기 내 코드의 간단한 예를 조각입니다 : 내가 대체하기 위해 노력하고있어 기존의 OCX 파일을하려고하면
[ComVisible(true),
Guid(Constants.CLASS_IID),
ProgId(Constants.PROG_ID),
ClassInterface(ClassInterfaceType.None),
ComSourceInterfaces(typeof(IMyServiceEvents))]
public class MyClass : Control, IMyService, IMyServiceEvents
{
[DispId(1)]
public event MyEventHandler MyEvent;
//... also implements IMyService, which is working
}
[ComVisible(true),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
Guid(Constants.EVENTS_IID)]
public interface IMyServiceEvents
{
[PreserveSig, DispId(1)]
void MyEvent([In]int Status);
}
[ComVisible(false)]
public delegate void MyEventHandler(int Status);
은/내 C#의 COM 서버 구현, 이벤트는 정상적으로 작동합니다. vb6로도 작성되었으므로 C# 서버의 내용이 잘못되었습니다.
또한 ClassInterfaceType에 대한 3 가지 설정을 모두 시도해보고 동일한 결과를 얻었습니다. 각 COM 서버를 다시 등록해야했지만.
내 생성 IDL을 보면 내게 맞았으며 모든 것이 원래 IDL과 매우 유사하게 보이기 때문에 재 작성하려고하는데 필요한 경우 게시 할 수 있습니다.
업데이트 : 이전 Visual Studio 6을 제거하고 VB6 응용 프로그램을 만들어 C# COM 서버를 테스트 한 결과 제대로 작동했습니다.
그래서 vb6 프로젝트에 디 컴파일 된 코드를 출력 할 수있는 무료 vb6 디 컴파일러를 가져 와서 COM 서버를로드하려는 타사 응용 프로그램에서 실행했습니다. 작동하지 않는 것을 보았습니다.
자신의 응용 프로그램이 디자이너의 컨트롤로 COM 서버를 사용하고 있고 테스트 프로그램이 WithEvents 형식의 멤버 변수를 선언 한 것으로 나타났습니다. 이 문제를 일으키는 디자이너와 함께 무언가가 진행되고 있습니까? COM 서버 ActiveX를 호환 가능하게하려면 어떻게합니까? 또한 VB6 ide는 도구 상자에 컨트롤로 C# com 서버를 추가 할 수 없다는 것을 알았습니다.
잘 시도했지만 작동하지 않았습니다. 그들의 vb6 코드가 .Net CCW가 이벤트를 처리하도록 허용하지 않는 무언가를 잘못하고 있는지 궁금합니다. 또한 여러 가지 시도, snk 추가 및 어셈블리를 GAC 대 regasm/codebase를 사용하여 퍼팅,하지만 아무것도 작동하는 것. 그러나 표준 방법은 정상적으로 작동합니다. – jonathanpeppers