컨테이너가 내 자신의 메서드를 호출 할 수 있도록 IPersistStorage 인터페이스의 메서드를 재정의하고 싶지만 컨트롤에서 클래스를 구현해야합니다. 따라서 COM 구성 요소로 컨트롤을 등록 할 때 래퍼 (Com Callable Wrapper)가 구현한다고 생각합니다. IPersistStorage 인터페이스 W 컨테이너는 랩퍼의 메소드를 호출합니다.은 C#에서 컨트롤의 메서드를 재정의합니다. COM 구성 요소
내 클래스의 IPersistStorage 메서드를 재정의하고 Control 클래스 (System.Windows.Forms)를 구현하는 방법은 무엇입니까? 문제는 Control이 아니며 인터페이스 나 클래스에 이러한 메소드가 없습니다.
namespace MiniEye
{
[ProgId("MiniEye")]
[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
[Guid("BBC06458-A67A-4413-81ED-F85E2FCC20CA")]
public partial class MiniEye : UserControl
{
private const string GUID = "BBC06458-A67A-4413-81ED-F85E2FCC20CA";
public MiniEye()
{
InitializeComponent();
}
}
}
위의 도구에서 UserControl에서 상속하지 않고 IPersist (때문에 해당 UserControl) IPersistStorage에서와 looks like
클래스 위의 도구는 OLEView에서 상속되는 클래스는 OLEView looks like
이 인터페이스를 Control 클래스에 추가하는 것은 대단히 논리적이지는 않지만, 사용자 정의 할 컨트롤의 클래스를 파생시켜야합니다. [ComVisible] 인터페이스를 추가하십시오. 이것이 직렬화 가능한 컨트롤을 만들려는 시도의 일종이라면 거기에 가지 마라, 잘 끝나지 않을 것이다. –
실제로 작동하지 않습니다. –
멋진. IPersistStorage는 "작동하지 않는"이유가 많기 때문에 C#의 까다로운 인터페이스이며 잘못 선언하고 IPersist에서 메서드를 생략하는 것은 매우 쉽습니다. 그러나 그것이 진정한 이유인지는 알 수 없습니다. –