0
내 첫 번째 시도는 실패했지만 가능한 것으로 기대하고 있습니다. 내가 COM이 등록과 같은 클래스가있는 경우 :. NET COMVisible/ComInterop - 등록하지 않고 유형을 사용할 수 있습니까?
[ComVisible(true)]
public interface Resolver
{
object Resolve(string type);
}
[ProgId("ClassResolver")]
[ClassInterface(ClassInterfaceType.None)]
[ComVisible(true)]
[Guid("53DB4409-0827-471D-94CE-2601D691D04C")]
public class Class1:Resolver
{
public object Resolve(string type)
{
return (ClassLibrary2.Interface1) new ClassLibrary2.Class1();
}
}
내가 대해 ComVisible하지만 등록되지 않은 Class2.Interface1를 반환하는 데 사용할 수 있습니다 (이것은 다른 라이브러리에서의) :
[ComVisible(true)]
public interface Interface1
{
string SomeMethod();
}
public class Class1:Interface1
{
public string SomeMethod()
{
MessageBox.Show("SomeMethod");
return "SomeMethod";
}
}
내 첫 번째 시도가 오류를 반환했습니다 : IUnknown : SomeMethod (내 보낸 메서드 없음), 나는 이것을 모르는 일부 트릭이있을 것으로 기대하고 있습니다.
오류 메시지가 잘 보이지 않는 무언가가 클라이언트 코드에 문제가 있습니다. 메서드에서 * object *를 반환하면 클라이언트가 예상 인터페이스 유형의 변형에서 IDispatch 또는 QueryInterface 호출을 통해 "후기 바인딩"을 사용해야합니다. 결코 IUnknown 일 수는 없습니다. 필자는 주조에 대한 현명하지 못한 시도에서 추측 할 수 있는데, 아마도 두 개의 별개의 유형 라이브러리를 가짐으로써 유발 될 수 있습니다. 그냥 짐작할 수 있겠지만 명확하게 질문에 문서화해야합니다. –