2009-11-06 10 views
6

VB6 DLL dosyasında bulunan bir yönteme 3 isteğe bağlı boole parametresi ekledim. Onu barındıran sınıf, MultiUse (public) ve yöntemin kendisi Private'dır. Sınıf, bu yönteme yapılan kamu çağrılarına izin veren bir TLB'den belirli bir arayüz uygular.C#, isteğe bağlı parametrelere sahip VB6 yöntemlerini çağırmakta sorun yaşıyor mu?

3 isteğe bağlı parametreyi VB6 tarafına ekledikten sonra, ilgili C# kodunu değiştirdim, böylece 3 isteğe bağlı parametreyi belirtin. bulunamadı

Yöntem: 'Boole MyTLBName.IMyClassName.MyMethod (System.Object'ten Sistemi Ben bu kodu çalıştırmayı denediğinizde ancak, bu şu hata iletisiyle başarısız olur ... ince yapılı. Dize, Boole, Boole, Int32, Int32 ByRef, System.Object, System.Object, System.Object, Boole, Boole, Boolean) '.

Hata iletisinde tüm 3 boole parametresinin nasıl göründüğüne dikkat edin? Bana iyi görünüyor ... C# yöntemini çağırırken o 3 booleanı belirttiğimi biliyorum. Şüpheli

, ben OleView içinde MyTLBName.IMyClassName arayüzünü teslim ve bu testere:

[id (0x60030000)]

HRESULT MyMethod(
       //Cut out the other parameters - they are working fine. 
       [in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyFirstOptionalBoolean, 
       [in, optional, defaultvalue(-1)] VARIANT_BOOL blnMySecondOptionalBoolean, 
       [in, optional, defaultvalue(-1)] VARIANT_BOOL blnMyThirdOptionalBoolean, 
       [out, retval] VARIANT_BOOL* __MIDL_0324); 

Yine, 3 isteğe bağlı parametreler görülebilir ve ince görünmek .

İşe yarayacakmış gibi gözüküyor ama belki bir şeyleri özlüyorum.

TLB'de "MyMethod" un başka bir versiyonunu oluşturmak zorunda kalmadan çalışmanın bir yolu var mı? (Farklı bir adla ve isteğe bağlı değil, 3 parametresiyle birlikte)

cevap

5

Şu anda, C# isteğe bağlı parametrelerle VB6 işlevlerini çağırırken sorun yaşamaktadır. Bir dış satıcı tarafından sağlanan VB6 bileşenini kesinlikle kullanmam gereken bir projede bununla çok mücadele ettim.

En kolay çözüm, bu işlevleri çağırmak için VB'de bir sınıf oluşturmaktı, çünkü VB.Net DOES isteğe bağlı parametreleri destekliyor ve sonra bu VB6 sınıfını C# olarak adlandırıyordu.

VB.Net'te yazılan sınıfta, bir VB6 işlevini çağırmak için çeşitli yöntemler sağlamak için uygun yöntem aşırı yüklemesini izledim.

Örnek - VB6 işlevinin üç parametresi olduğunu, ilk gerekli olanı ve ikinci iki isteğe bağlı olduğunu, VB.Net bileşeninde üç işlev oluşturacağını varsayalım.

Public Sub CallComponent(byVal myParameter as Integer) 
    ....call component with one parm 
End Sub 

Public Sub CallComponent(byVal myParameter as Integer, byVal parm2 as String,) 
    ....call component with two parms 
End Sub 

vs ...

Ve isteğe bağlı parametreler 4.0 geliyor gibi görünüyor: http://geekswithblogs.net/michelotti/archive/2009/02/05/c-4.0-optional-parameters.aspx

+1

1 Vay. Ne acı. –

+0

Bunu bir şans vereceğim ... Teşekkürler –

+0

için Teknik cumhuriyeti bağlantısı bozuldu. –