1

这是我们在 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是可以接受的(通过反转接口的 2 个方法观察到)。

怎么会?我怎样才能让 MIDLstring再次理解?

TIA。

4

3 回答 3

1

看起来编译器不知道类型“字符串”,也许你忘记在项目中包含一些引用,或者它在 VS2010 中更改的位置等。仔细检查包含、引用等。

PS有意义吗?

于 2011-09-06T10:39:28.470 回答
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 );
};
于 2011-09-06T16:44:53.983 回答
0

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

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

于 2011-09-14T14:02:50.597 回答