迁移到VS2010后出现奇怪的IDL错误
Weird IDL error after migration to VS2010
下面是我们在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类型,但最好是一个属性),我现在有错误。
解决方案:从项目中排除文件!
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 致命错误C1083在IDL文件上使用OPENDDS_IDL工具时
- 迁移到VS2010后出现奇怪的IDL错误