【发布时间】:2017-04-28 07:16:00
【问题描述】:
每当我尝试通过 COM 从 Visual Basic 经典版调用 C# 线程时都会收到错误消息。错误说不能封送泛型类型,这很奇怪,因为没有涉及泛型。
COM接口:
[Guid("C8B306A5-980D-4226-8130-5E2E0F710FC2")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface comInterface
{
[DispId(1)]
Task firstTask();
}
实施:
[Guid("0D5E5234-B1C0-4CFA-9B35-21F091E2E8C4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("COMproject.implementClass")]
public class implementClass : comInterface{
public async Task firstTask(){
//doSomething
}
在 Vb6 中调用:
Dim comObject As muhDLL.comInterface
Set comObject = New muhDLL.implementClass
comObject.firstTask
我可以创建一个在 C# 中调用线程并通过 COM 公开该方法的方法,但是我确实收到了警告,而且代码看起来一般都很丑陋。有什么方法可以通过 COM 直接调用异步任务,为什么 COM 似乎不支持任务,或者我做错了什么?
【问题讨论】:
-
您遇到了什么错误?
-
对不起,我编辑了帖子。 “无法封送泛型类型”异常
-
好吧,我对 COM 有点生疏了,但由于
Task我怀疑 COM 是否可以返回任务,这似乎是合乎逻辑的。我不确定您通过将方法创建为async来实现什么,因为据我所知 - COM 在调用时管理您的线程,我怀疑它是否使用了async await的好处。我会首先尝试创建方法而不返回 Task 或使用 async 并检查它是否有效。 -
我不太清楚你所说的“我怀疑 COM 可以返回任务”是什么意思,因为据我所知,Task 没有返回语句。
-
所有 COM 方法都返回一个 HResult。
HResult = Function(InParam1, InParam2, OutParam1)VB 将其更改为类似于 `OutParam = Function(InParam1, InParam2) 的返回值进入错误对象。
标签: c# com vb6 task com-interop