Ich erhalte eine Fehlermeldung, wenn ich versuche, einen C# -Thread von Visual Basic Classic über COM aufzurufen. Der Fehler besagt, dass generische Typen nicht gemarshallt werden können, was merkwürdig ist, da keine Generika beteiligt sind.Aufruf von Threads über COM-Interop
COM-Schnittstelle:
[Guid("C8B306A5-980D-4226-8130-5E2E0F710FC2")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface comInterface
{
[DispId(1)]
Task firstTask();
}
Implementation:
[Guid("0D5E5234-B1C0-4CFA-9B35-21F091E2E8C4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("COMproject.implementClass")]
public class implementClass : comInterface{
public async Task firstTask(){
//doSomething
}
Anruf in VB6:
Dim comObject As muhDLL.comInterface
Set comObject = New muhDLL.implementClass
comObject.firstTask
ich eine Methode nur erzeugen kann, die den Faden in C# aufruft und das Verfahren aussetzen durch COM aber dann bekomme ich Warnungen und der Code sieht im Allgemeinen hässlich aus. Gibt es eine Möglichkeit, wie ich eine asynchrone Aufgabe direkt über COM aufrufen kann und warum scheint COM keine Aufgaben zu unterstützen oder mache ich etwas völlig falsches?
was ist der Fehler, den Sie erstellen zu bekommen? – gilmishal
Entschuldigung, ich habe den Beitrag bearbeitet. "Generische Typen können nicht gemarshallt werden" Ausnahme – MrKey
Ok, ich bin ein bisschen rostig mit COM, aber es scheint logisch, dass es wegen der 'Task' ist, bezweifle ich, dass COM eine Aufgabe zurückgeben kann. Ich bin mir nicht sicher, was Sie erreichen wollen, indem Sie die Methode async erstellen, denn soweit ich weiß, verwaltet COM Ihre Threads beim Aufruf, und ich bezweifle, dass es den Vorteil von Async have nutzt. Ich würde zuerst versuchen, die Methode zu erstellen, ohne Aufgabe zurückzugeben oder async zu verwenden und zu überprüfen, ob es funktioniert. – gilmishal