Aussetzen dll für COM-Interop

Ich dachte, ich wüsste, wie dies zu tun, aber natürlich nicht so, ich würde schätzen etwas Hilfe!
Ich kann nicht an meine dll zu registrieren, so kann ich instanziiere es in einer VBS-oder anderswo.

Schrieb ich die folgende Beispielklasse geprüft "Make assembly COM-Sichtbar", markiert "für COM-Interop Registrieren", dann wird es gebaut.
Wenn ich versuche zum instanziieren von VBS bekomme ich die "Activex-Komponente kann Objekt nicht erstellen" - Fehler.

Dies ist der class-code:

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 dies ist die VBS:

Dim a

Set a = CreateObject("Smurf.Pants")

msgbox("ok")

Was muss ich sonst noch tun?

Dank 🙂

[Bearbeiten]

Vergessen zu erwähnen, nach dem ersten Ausfall habe ich versucht "REGSVR32" und REGASM - keine Hilfe!

[/edit]

Beachten Sie, dass, wenn ich versuche, REGSVR32, bekomme ich diese Meldung:

Das Modul "C:...\Smurf.dll" wurde geladen, aber der Eintrag-Punkt DllRegisterServer wurde nicht gefunden.
Stellen Sie sicher, dass "C:...\Smurf.dll" ist eine gültige DLL oder OCX-Datei 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;
        }
    }
}
  • Vielleicht kann das helfen: codeproject.com/Articles/24089/...
  • Sie müssen auch ComVisibleAttribute auf Ihrem Pants Typ oder die ganze Versammlung.
  • Ach eigentlich brauchen Sie nicht ComVisibleAttribute.
  • mögliche Duplikate von 64 bit Sachen für den C# - Entwicklung
  • Ich bin zwingen einen 32-bit kompilieren, und keine Freude. Bitte siehe update oben.
  • Wir tun dies auch, dann brauchen wir regasm solo und 3 weitere Male mit unterschiedlichem Parameter: tlb, codebase und mit dem regfile, und dann stellen Sie sicher, dass Ihre Vb6-code, der auf der *.tlb Datei, die Sie erstellen mit der tlb option

Schreibe einen Kommentar