【发布时间】:2014-04-10 00:57:48
【问题描述】:
我正在调用一个外部提供的 COM DLL,为此我生成了一个 COM 互操作包装器。为了论证起见,让我们调用我要调用的接口IEnumFoo。
IEnumFoo 具有典型的 COM 枚举器模式:
HRESULT Next (
ULONG celt,
IFoo** rgelt,
ULONG* pceltFetched
);
其中第一个参数是期望结果的数量,第二个参数是写入结果的缓冲区,最后一个参数描述实际写入的结果数量。
当我选择“添加引用”并将 Visual Studio 指向此 DLL 时,它会生成具有以下签名的 COM 互操作程序集:
void Next(uint, out IFoo, out uint)
这仅允许 .NET 代码一次请求一个对象,这会增加使用这些 API 的大量开销。
是否有某种机制我可以用来生成Next 的版本,它可以让我在上面提供更多IFoo“插槽”,这会让封送器高兴? (我不反对在互操作程序集中手动编辑 IL :))
【问题讨论】:
标签: c# c++ .net com com-interop