Υπάρχουν περιπτώσεις που θέλουμε να καλέσουμε μια βιβλιοθήκη μας που έχουμε γράψει σε C# απο την VB6 για να έχουμε τα καλούδια του .Net, κυρίως όταν έχουμε να κάνουμε με συστήματα γραμμένα σε COM και ο μόνος τρόπος να τα επεκτείνουμε είναι να κάνουμε addins σε VB.

Αυτα που χρειάζεται να κάνουμε είναι τα εξής:

1) Οι μέθοδοι, μεταβλητές κλπ που θέλουμε να καλούμε απο την VB πρέπει να είναι δηλωμένα σε ένα Interface

2) Το interface να υλοποιείται στην κλάση explicit πχ

[Guid("DA243ABC-6205-4511-81FD-60F07057ACD7")]
    public interface IClass1
    {
         string SampleField { get; set; }

         void SampleMethod();

         void SampleMethod2(string Param1);

         string SampleFunction();

         string SampleFunction2(string Param1);
    }
    [Guid("571583E7-B26C-4842-B5AD-952820831A70")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("MyClassLib.Class1")]
    public class Class1 : IClass1
    {
        private string _SampleField;
        string IClass1.SampleField
        {
            get{
                return _SampleField;
            }
            set { _SampleField = value; }
        }

        void IClass1.SampleMethod()
        {
            System.Windows.Forms.MessageBox.Show("My Sample Method");
        }

         void IClass1.SampleMethod2(string Param1)
        {
            System.Windows.Forms.MessageBox.Show("My Sample Method " + Param1);
        }

         string IClass1.SampleFunction()
        {
            return "Sample Function";
        }

         string IClass1.SampleFunction2(string Param1)
        {
            return Param1;
        }
    }

 

3) να προσθέσετε τα attributes Guid, ClassInterface

4) να βάλετε στις ρυθμίσεις του Project, στο Assembly Informations, check στο COM Visible

5) να δημιουργήσετε ένα αρχείο snk για να κάνετε Sign το assembly για να μπορεί να γίνει register sto GAC.

sn –k mykey.snk

6) στις ρυθμίσεις του Project , στο Signing, κάντε check το Sign this assembly και επιλέξτε το αρχείο που δημιουργήσατε.

7) κάντε compile και μετά τρέξτε το

gacutil /i MyClassLib.dll /f

tlbexp MyClassLib.dll

regasm MyClassLib.dll /tlb:MyClassLib.tlb

 

ή διαφορετικά στις ρυθμίσεις του Project, στο Build κάντε check το Register for COM interop. (Χρειάζεται να τρέξετε το Visual Studio ως administrator)

 

Προσοχή σε 64 bit λειτουργικά ότι πρέπει στις ρυθμίσεις στο Build στο Platform Target να βάλετε το x86.

 

Μετά απλά προσθέτετε στα References στη VB6 τη βιβλιοθήκη σας ή δυναμικά την καλείτε.

Share/Bookmark a2a_linkname="C# και VB6 μαζί;";a2a_linkurl="http://www.studentguru.gr/blogs/ikaragkiozoglou/archive/2011/08/08/c-vb6.aspx";