2
我用Delphi實現了一個ActiveX控件。現在我想爲它添加一個事件。我使用類型庫編輯器來添加這樣的事件。用C#處理delphi的ActiveX控件事件
procedure OnActionMethod(ActionType: Integer; x1: Integer;
y1: Integer; x2: Integer; y2: Integer; param1: Double); dispid 213;
TezDICOMXOnActionMethod = procedure(ASender: TObject;
ActionType: Integer; x1: Integer; y1: Integer; x2: Integer; y2: Integer;
param1: Double) of object;
一切正常編譯。
現在我構建一個C#應用程序,使用該ActiveX控件並嘗試實現事件處理程序。
private AxezDICOMax.AxezDICOMX the_ezdicom; // this is the activeX object
public void onActionHandler(object sender,long actiontype,
long x1, long y1, long x2,long y2, double param1)
{
MessageBox.Show("abcabc" + x1.ToString() + x2.ToString());
}
private void MainForm_Load(object sender, System.EventArgs e)
{
the_ezdicom.OnActionMethod += new
AxezDICOMax.IezDICOMXEvents_OnActionMethodEventHandler(this.onActionHandler);
}
但是,編譯與此錯誤
Error 1 No overload for 'onActionHandler' matches delegate
'AxezDICOMax.IezDICOMXEvents_OnActionMethodEventHandler'
OnActionMethodEventHandler
我做了什麼錯的抱怨?我沒有在我的Delphi源碼的任何地方找到OnActionMethodEventHandler()
。
TObject是Delphi類型。你不能通過COM邊界傳遞其中的一個。爲發件人選擇不同的類型,或完全刪除該參數。另一個明顯的錯誤是C#long是64位。使用int來匹配Delphi Integer。 –
對不起,可能這是我的不好,但我可以刪除源文件中的ASender:Tobject。我想我應該用類型庫編輯器編輯它,但我不知道如何。請提供更多幫助。我把每一個「長」改爲「int」,沒有什麼不同。 –
他們有沒有辦法解決這個問題?無論如何,我不需要從Asender讀取任何信息。 –