Exposer pour COM Interop dll

Je pensais que je savais comment faire, mais évidemment pas si j'apprécierais un peu d'aide!
Je ne peux pas obtenir ma dll pour vous inscrire afin que je puisse instancier dans un VBS, ou ailleurs.

J'ai écrit l'exemple suivant de classe, coché la case "Faire de l'assemblée COM Visibles", coché la case "s'Inscrire pour COM Interop", puis l'a construit.
Lorsque j'essaie d'instancier à partir de VBS-je obtenir le "composant Activex ne peut pas créer l'objet" d'erreur.

C'est le code de classe:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Smurf
{
    public class Pants
    {
        public string Explode(bool Loud)
        {
            string result;
            if (Loud)
                result = "BANG";
            else
                result = "pop";
            return result;
        }
    }
}

...et c'est le VBS:

Dim a

Set a = CreateObject("Smurf.Pants")

msgbox("ok")

De quoi dois-je faire?

Merci 🙂

[modifier]

Oublié de mentionner, après le premier échec, j'ai essayé REGSVR32 et REGASM - aucune aide!

[/edit]

Remarque que lorsque je tente REGSVR32, j'obtiens ce message:

Le Module "C:...\Smurf.dll" a été chargé mais le point d'entrée DllRegisterServer est introuvable.
Assurez-vous que "C:...\Smurf.dll" est un fichier DLL ou OCX valide, puis essayez de nouveau.

Comment utile est qui??

C'est la dernière version du code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Smurf
{
    [Guid("EAA4976A-45C3-4BC5-BC0B-E474F4C3C83F")]
    public interface IPants
    {
        [DispId(1)]
        string Explode(bool Loud);
    }

    [Guid("7BD20046-DF8C-44A6-8F6B-687FAA26FA71"),
        InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IPantsEvents
    {
        string Explode(bool Loud);
    }

    [ComVisible(true)]
    [Guid("0D53A3E8-E51A-49C7-944E-E72A2064F938"),
        ClassInterface(ClassInterfaceType.None),
        ComSourceInterfaces(typeof(IPantsEvents))]
    public class Pants : IPants
    {
        public Pants() { }

        [ComVisible(true)]
        [ComRegisterFunction()]
        public static void DllRegisterServer(string key) { }
        [ComVisible(true)]
        [ComUnregisterFunction()]
        public static void DllUnregisterServer(string key) { }

        [ComVisible(true)]
        public string Explode(bool Loud)
        {
            string result;
            if (Loud)
                result = "BANG";
            else
                result = "pop";
            return result;
        }
    }
}
Peut-être que cela peut vous aider: codeproject.com/Articles/24089/...
Vous avez également besoin d' ComVisibleAttribute sur votre Pants type ou de l'ensemble de l'assemblée.
Oh en fait, vous n'avez pas besoin ComVisibleAttribute.
double possible de 64 bits trucs pour le développement C#
Nous faire cela, nous devons utiliser regasm solo et plus de 3 fois en place à l'aide des paramètres: tlb, le code et le regfile, puis assurez-vous que votre Vb6 code fait référence à la *.tlb fichier que vous créez avec le tlb option

OriginalL'auteur CompanyDroneFromSector7G | 2012-07-19