[英]Implementing a c# interface that has an event through COM to VB6
我有一個VB6類需要實現我在C#中創建的接口。 我已經能夠通過COM成功實現我的vb6類中的接口的所有屬性,但是無法實現它具有的事件。 如果我理解正確,我將需要相應的添加和刪除訪問器定義為注冊事件的使用者,但我不能讓VB6接受定義事件的接口。 我正在將類的InterfaceType設置為InterfaceIsIDispatch,但在我嘗試編譯時仍然會收到錯誤“實現的錯誤接口:方法在名稱中有下划線”。 接口沒有定義任何方法,屬性和事件都沒有任何下划線。
這是接口定義
namespace AV8B.Overlay
{
[ComVisible(true)]
[Guid("89519DCE-86D6-4962-8CEA-450F2AB31B4E")]
public delegate void OverlaySymbolPropertyChangedEventHandler(object sender, OverlaySymbolPropertyChangedEventArgs e);
[ComVisible(true)]
[Guid("9A59EF10-B688-4af9-8C21-FB95C7ED699A")]
public class OverlaySymbolPropertyChangedEventArgs : PropertyChangedEventArgs
{
OverlaySymbolPropertyChangedEventArgs(string propertyName) : base(propertyName) { }
}
[ComVisible(true)]
[Guid("379B179C-85FA-4efb-8198-D1A4C80D645A")]
public interface IOverlaySymbol : INotifyPropertyChanged
{
bool SelectedForProcessing { get; set; }
int SymbolNumber { get; }
string SymbolType { get; }
double Latitude { get; }
double Longitude { get; }
string Color { get; }
int Size { get; }
/// <summary>
/// This method fires the PropertyChanged event.
/// </summary>
void NotifyPropertyChanged();
/// <summary>
/// The event that fires when a property changes.
/// </summary>
new event OverlaySymbolPropertyChangedEventHandler PropertyChanged;
}
}
這背后的目標是將實現此接口的現有VB對象放入綁定列表中,該綁定列表將附加到列表網格視圖。 列表網格視圖需要知道其項目的屬性何時更改,以便相應地更新。
正如您所描述的, INotifyPropertyChanged
主要用於屬性綁定。
具體來說,VB6控件(以及一般的ActiveX控件)大多已經內置,但它的界面不同。
您可以在其他的方式也許工作,它圓圓:你的電網接受.NET控件與INotifyPropertyChanged
和ActiveX控件與INotifyPropertySink
。 一些相關助手可能是:
豎起大拇指!
聽起來很復雜。 也許有一種更好的方法
1)在.net上創建一個接口的實現,並使用一個模式“Active Record”para行為2)為方法創建一個包裝器后用方法簡單如何
entityChange(參數)saveChange(參數)SaveAll CancellAll
從.net你可以把事件扔到vb6(更新網格或做某事)
這里的例子列表http://www.elguille.info/NET/servidorNETparaCOM/servidorNETparaCOM.htm
混合所有並做測試
即使使用已聲明事件的本機VB6類,也無法在VB6中實現事件。
你可以做些什么來處理這種阻抗是將一個回調接口傳遞給VB6對象並在.Net中實現一個代理,它在回調方法實現中引發你的事件。 代理顯然也需要轉發屬性/方法。
一個選項是使用標准的COM事件來處理接口,訂閱,unsubscrie等。
如果您只有一個對象,那么普通的事件/委托對將作為COM事件公開,但是對於更復雜的接口和事件,您需要創建事件接收器接口並使用以下方法將其與每個類本身關聯:
[System.Runtime.InteropServices.ComSourceInterfaces(typeof(ISystem_COMEventSink))]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.