Laden...

Wrapper zum bereitstellen einiger Funktionen als COM-Schnittstelle

Erstellt von frisch vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.559 Views
frisch Themenstarter:in
2.082 Beiträge seit 2005
vor 13 Jahren
Wrapper zum bereitstellen einiger Funktionen als COM-Schnittstelle

Hallo,

ich habe eine IPC-Schnittstelle in mein Projekt eingebunden. Nun muss es auch möglich sein einige Funktionen der IPC-Schnittstelle mittels COM (DLLImport) anzusprechen. Den Wrapper habe ich soweit schon gebaut. Zum testen enthält die DLL ein Interface und eine Klasse, beides implementiert die Methode "Test" welche nur einen Boolean "true" zurück gibt. Die DLL ist als COM registriert, wenn ich aber versuche einen DLL Import zu machen, erhalte ich eine EntryPointNotFound-Exception.

Ich habe mir nun schon -zig Tutorials durchgelesen und meine Konfiguration überprüft, es hat jedoch leider nichts geholfen. Der Dependency-Walker macht mir auch ziemliche Probleme, dieser zeigt mir nämlich nichts an. Muss ich also davon ausgehen, dass die Methode nicht exportiert wird?

Hier mal der allgemeine Aufbau meines Projekts:

COM-Dll:

[Guid("6091A51C-F3A7-4b9f-AD5F-ACA89C77D905"),
    InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
    ComVisible(true)]
    public interface IIpcWrapper {
        [DispId(1)]
        bool Test();
    }

[Guid("EF66017D-8A42-40ce-A372-A6740D55E9F2"),
    ClassInterface(ClassInterfaceType.None),
    ProgId("MyProgId"),
    ComVisible(true)]
    public class IpcWrapper : IIpcWrapper {
        public IpcWrapper() {
        }

        [DispId(1)]
        public bool Test() {
            return true;
        }
    }

Aufrufendes Programm:

public class ComCaller {
        [DllImport("MyDll.dll")]
        public static extern bool Test();

        public void DoSomething() {
            bool result;

            result = Test();
        }
    }

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

eine COM-dll solltest Du ganz normal als Verweis referenzieren können, wie eine .NET-dll
DllImport ist dabei AFAIK nicht nötig.
Wenn beides .NET-Assemblies sind --> warum überhaupt COM?

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

frisch Themenstarter:in
2.082 Beiträge seit 2005
vor 13 Jahren

Hallo MarsStein,

habe ich gerade auch nachgelesen 😃

Warum COM?
Eine Partnerfirma, welche meine Schnittstelle nutzen möchte, entwickelt auf Navision und angeblich können die DLLs nicht direkt anbinden. (Habe selbst keine Erfahrung mit Navision)

Gibt es eine Möglichkeit, meine COM-Methoden zu testen? Bin leider nicht erfahren mit C++, sonst würde ich da die Aufrufe schreiben.

Wenn es keine andere Möglichkeit gibt, werde ich wohl nicht drum herum kommen, eine C++ Anwendung zum Testen zu schreiben.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Gibt es eine Möglichkeit, meine COM-Methoden zu testen?

Ja:

eine COM-dll solltest Du ganz normal als Verweis referenzieren können, wie eine .NET-dll

Wenn Du das machst, kannst Du die COM-Dll von inem .NET-Projekt aus testen.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

T
708 Beiträge seit 2008
vor 13 Jahren

Hi frisch,

hier habe ich genau das richtige für dich:

http://msdn.microsoft.com/en-us/library/aa973247.aspx

frisch Themenstarter:in
2.082 Beiträge seit 2005
vor 13 Jahren

eine COM-dll solltest Du ganz normal als Verweis referenzieren können, wie eine .NET-dll
Wenn Du das machst, kannst Du die COM-Dll von inem .NET-Projekt aus testen. Mit der Problematik, dass ich ja bei direkter Referenzierung frei nach Launer komplexe Datentypen zurückgeben kann, ich bei COM jedoch beschränkt bin bzw. das Marshalling explizit definieren muss.

Könnte also sein, dass ich eine DLL herausgebe, die bei mir zwar funktioniert, bei C++-Entwicklern allerdings nicht.

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

3.971 Beiträge seit 2006
vor 13 Jahren

Such dir ein altes VB6 und binde den COM-Verweis dort ein. Denke mit VB ist es leichter zu testen als mit C++

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

R
103 Beiträge seit 2009
vor 13 Jahren

Zum Testen von eigenen COM Kreationen geht auch vbscript ganz gut.
Einfach ne Textdatei aufmachen, testaufruf ähnlich wie unten einfügen und in .vbs umbenennen und ausführen:

Set mycomtest= CreateObject("csfp.system5")
mycomtest.HelloWorld()