更改框架 4.0 中数组的 Com Interop 表示?

Changes to Com Interop representation of Arrays in framework 4.0?

我正在将一个 C# web 项目从 2.0 框架升级到 4.0 框架,我似乎在它引用的 COM 组件周围遇到了一些问题。似乎在互操作的生成过程中发生了一些我不知道的变化。

我现在在不更改任何代码的情况下遇到如下错误:

cannot convert from 'out string[]' to 'out System.Array'

上面的第一个错误是原型:

[id(3), helpstring("method GetAllWaves")] HRESULT GetAllWaves([out] SAFEARRAY(BSTR)* ppWaves,  [out,retval] ExactaStatus *Status);

这是使用它的 C# 代码:

string[] arrWaves;

m_BPStatus = m_objTXPBatchPick.GetAllWaves(out arrWaves);

似乎 visual studio 现在正在根据我之前使用的相同 COM 库生成不同的方法原型,并且它使用的是 System.Array 而不是特定类型。这是关于 4.0 项目的新内容还是 visual studio 我遗漏了什么地方?

我从来没有找到解决这个问题的方法。我必须进行以下代码更改:

Array arrWaves;

m_BPStatus = m_objTXPBatchPick.GetAllWaves(out arrWaves);
Session["arrWaves"] = arrWaves.Cast<string>().ToArray();

上面的关键是将其更改为将其存储为.Cast<string>().ToArray()