2011-07-28 37 views
5

hangi elimden aşağıdaki kullanarak benim VB6 uygulamasından 'gizle':Sadece COM işlevi yapabilir miyim? (Karşısı <Runtime.InteropServices.ComVisible) (Yalancı>) benim VB.NET DLL bazı işlevlere sahiptir

<Runtime.InteropServices.ComVisible(False)> _ 

Ama olduğu SADECE .NET istemcilerine değil, COM istemcilerine görünür bir işlev oluşturmanın bir yolu var mı?

Bu şekilde, .NET bildirimi için paylaşılan yöntemlerini kullanarak örnek bildirimi gereksinimini ortadan kaldırabilirim.

+2

Hayır, [ComVisible] bildirimi dışa aktarılmak için Genel olmalıdır. Son cümle oldukça gizemli. –

cevap

3

Explicit Interface Implementation'u kullanarak ne istediğinizi başarabilirsiniz. COM istemcileri ve .NET istemcileri için kullanılabilecek bir arabirimi, uygulama sınıfınızda tüm yöntemleri özel bırakarak bildirebilirsiniz. Kod aşağıdaki gibi görünebilir: "Ben bir örneği ihtiyacını ortadan NET tarafı için Paylaşılan yöntemleri kullanabilirsiniz Bu şekilde:

Imports System.Runtime.InteropServices 

    Public Interface ITestInterface 

    <ComVisible(True)> _ 
     Sub MyTestMethod()  
    End Interface 

    <ComVisible(True)> _ 
    Public Class TestClass 
     Implements ITestInterface 

     Private Sub MyTestMethod() Implements ITestInterface.MyTestMethod 
     End Sub 
    End Class 


Sana ile demek istediğini anlamıyorum söylemek zorunda "

+0

Yüklü yöntemler olarak (ve normal olarak) bildirilmesi gereken küçük yardımcı yöntemler yüklerim ancak bunu yaparlarsa COM'a maruz kalmazlar, bu nedenle aynı COM yöntemini yalnızca bir COM'a maruz kalan bir sarmalayıcıyla aynı yöntemle çağırmak istiyorum (Ortak Alt) ve yalnızca .NET'e (Public Shared Sub) açık olan bir yöntem COM tarafındaki örnek bildirimlerinden ayrılamam ama .NET tarafında olabilirim. –