2012-09-02 54 views
1

我有以下代碼模式:如何調用通過interop傳遞的對象的函數?

[VB6] 
Dim objNetDllObject As New NetDllObject 
objNetDllObject.PassVb6Form(MyForm) 
objNetDllObject.ShowForm 

[C#] 
object Vb6Form; 
private void PassVb6Form(object form) { Vb6Form = form; } 
private void button1_Click(object sender, EventArgs e) { Vb6Form.Show(); } 

的問題是,C#編譯器不喜歡Vb6Form.Show()語句,因爲Show()不是object的功能,這是真的。我怎樣才能編譯這段代碼?

+0

類型轉換?問題是VB討厭綁定,因爲這種類型是在運行時確定的,如果函數不存在,那麼程序崩潰。如果你問我很愚蠢 –

+0

你可以使用動態代替對象嗎? '動態Vb6Form' –

+0

@ColeJohnson:我認爲我不會遇到運行時不存在的函數問題。我的問題是它甚至不會編譯。 –

回答

1

我想解決這樣的問題(因爲VB6有NetDllObject參考,我猜測它有一個參考,可以實現其它目的以及)

暴露在.net中的接口,你想你的VB6接口來實現:

Implements IVB6Form 

Public myForm as Form 

Public Sub IVB6Form_Show() 
    myForm.Show() 
End Form 

更改C#簽名來使用,而不是一個objec:

public interface IVB6Form 
{ 
    void Show(); 
} 

在VB6在一個新的類實現此t參考:

private void PassVb6Form(IVB6Form form) { Vb6Form = form; } 
相關問題