Странная ошибка IDL после миграции в VS2010
-
26-10-2019 - |
Вопрос
Вот очень простой интерфейс 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 );
};