迁移到VS2010后出现奇怪的IDL错误

Weird IDL error after migration to VS2010

本文关键字:IDL 错误 VS2010 迁移      更新时间:2023-10-16

下面是我们在VS2008下成功使用的一个非常简单的IDL接口(为了简洁,参数列表缩短了):

interface Mailer
{
    string findNode( [in] string requestedNode );
    unsigned short addMessage( [in] string msg, [in] unsigned short kind );
};

我们正在将解决方案迁移到VS2010 SP1。现在我们有以下构建错误:

M.idl(3): error MIDL2025: syntax error : expecting a type specification near "string"

这在VS2008 SP1中总是非常有效注意,我已经用[in]代替了in。当我挠头的时候,我发现MIDL 2010也不喜欢in,但对[in]却只字未提。

注意unsigned short是可以接受的(通过反转接口的两个方法观察到)。

如何来吗?如何让MIDL再次理解string ?

TIA。

看起来编译器不知道类型'string',也许你忘记在项目中包含一些引用,或者它的位置在VS2010中改变了,等等。仔细检查包含内容、参考资料等。

注:这说得通吗?

对于从c#中暴露,这:

  interface Mailer
    {
        [return, MarshalAs(UnmanagedType.BStr)]
        string findNode( [In, MarshalAs(UnmanagedType.BStr)] string requestedNode );
        unsigned short addMessage( [In, MarshalAs(UnmanagedType.BStr)] string msg, [in] unsigned short kind );
    };

我看到你可能是指从c++中暴露它:

interface Mailer
{
    HRESULT findNode( [out, retval] BSTR* result, [in] BSTR requestedNode );
    HRESULT addMessage( [out, retval] unsigned short* result, [in] BSTR msg, [in] unsigned short kind );
};

看起来IDL文件虽然存在于项目中,但根本没有使用。VS2008会静默地忽略它(就像它对未引用的.h文件所做的那样)。出于某种原因,VS2010尝试编译它,即使它没有在其他任何地方被引用。由于内容是完全错误的(字符串确实不是一个本地IDL类型,但最好是一个属性),我现在有错误。

解决方案:从项目中排除文件!