Stellen Sie DLL für COM Interop

Ich dachte, ich wüsste, wie man das macht, aber natürlich nicht, deshalb würde ich mich über Hilfe freuen! Ich kann meine DLL nicht registrieren lassen, damit ich sie in einem VBS oder anderswo instanziieren kann.

Ich habe die folgende Beispielklasse geschrieben, "Assembly COM sichtbar machen", "Für COM-Interop registrieren" aktiviert und dann erstellt. Wenn ich versuche, es von VBS zu instanziieren, erhalte ich den Fehler "Activex-Komponente kann Objekt nicht erstellen".

Dies ist der Klassencode:

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;
        }
    }
}

... und das ist der VBS:

Dim a

Set a = CreateObject("Smurf.Pants")

msgbox("ok")

Was muss ich sonst noch tun?

Vielen Dank :)

[bearbeiten]

Ich habe vergessen zu erwähnen, dass ich nach dem ersten Fehlschlag REGSVR32 und REGASM ausprobiert habe - keine Hilfe!

[/bearbeiten]

Beachten Sie, dass beim Versuch von REGSVR32 die folgende Meldung angezeigt wird:

Das Modul "C: ... \ Smurf.dll" wurde geladen, aber der Einstiegspunkt DllRegisterServer wurde nicht gefunden. Stellen Sie sicher, dass "C: ... \ Smurf.dll" eine gültige DLL- oder OCX-Datei ist, und versuchen Sie es dann erneut.

Wie hilfreich ist das?

Dies ist die neueste Version des Codes:

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;
        }
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage