Вопрос

Вот очень простой интерфейс 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 принимается (как наблюдается путем инвертирования двух методов границы раздела).

Почему? Как я могу заставить Midl понять string опять таки ?

Тиа

Это было полезно?

Решение 3

Похоже, что файл IDL, хотя и присутствующий в проекте, вообще не используется. VS2008 молча проигнорировал его (как это было бы для файла без ссылки .h). По какой -то причине VS2010 пытается скомпилировать его, даже если на него нигде не ссылаются. А поскольку содержимое абсолютно глюки (строка действительно не является нативным типом IDL, а атрибутом, как лучше, у меня теперь есть ошибки.

Решение: исключить файл из проекта!

Другие советы

Похоже, что компилятор не знает о типе «строка», возможно, вы забыли включить некоторую ссылку в проект или его местоположение, измененное в VS2010 и т. Д.

PS делает что имеет смысл?

Для разоблачения из 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 );
};
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top