2012-09-02 53 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; } 
相关问题