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

时间:2011-09-06 10:24:30

标签: c++ visual-studio-2010 idl midl

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

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被接受(通过反转界面的2种方法观察到)。

为什么?如何让MIDL再次理解string

TIA。

3 个答案:

答案 0 :(得分:1)

看起来编译器不知道类型'string',也许你忘了在项目中包含一些引用,或者它在VS2010中的位置发生了变化等。仔细检查包含,引用等。

P.S。 that有意义吗?

答案 1 :(得分:0)

对于从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 );
};

答案 2 :(得分:0)

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

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