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
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
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
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
Hi frisch,
hier habe ich genau das richtige für dich:
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
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...
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()