使用C++;声明接口时IDL文件中的名称空间 我有一个C++语言库,在IDL文件中声明接口时,我想使用它的结构。以下是示例:
service.idl使用C++;声明接口时IDL文件中的名称空间 我有一个C++语言库,在IDL文件中声明接口时,我想使用它的结构。以下是示例:,c++,namespaces,declaration,idl,C++,Namespaces,Declaration,Idl,service.idl import "..//core//common_structures.h"; [ object, uuid(13B01AEB-52EC-4546-BDE0-DE91B37337CE), dual, pointer_default(unique) ] interface IDeviceManagement: IUnknown { HRESULT GetSerialByIndex ([in] uint8_t id, [out] Serial *ser
import "..//core//common_structures.h";
[
object,
uuid(13B01AEB-52EC-4546-BDE0-DE91B37337CE),
dual,
pointer_default(unique)
]
interface IDeviceManagement: IUnknown {
HRESULT GetSerialByIndex ([in] uint8_t id, [out] Serial *serial, [out, retval] VARIANT_BOOL *result);
};
串行结构在key_api命名空间下的导入头中定义。构建时,一切正常,直到生成service_i.h并出现以下错误:
error C2061: syntax error : identifier 'Serial' ..\service\service_i.h
在这些生成的行附近:
IDeviceManagement : public IUnknown
{
public:
virtual HRESULT STDMETHODCALLTYPE GetSerialByIndex(
/* [in] */ uint8_t id,
/* [out] */ Serial *serial,
/* [retval][out] */ VARIANT_BOOL *result) = 0;
};
我认为这是因为Serial被包装在名称空间下,而service_I.h对此一无所知。一个解决方案就是去掉名称空间。当我们实际上可以保留名称空间时,是否存在任何变体?您正在IDL导入一个头;不是IDL文件<代码>串行应使用(其他)IDL在本IDL文件中描述的另一个IDL文件管理器中描述。这在您试图使用它的情况下尤其重要,因为代理/存根生成器需要知道如何安排
Serial
进行封送处理。当我再添加一个IDL文件时,VS2010会抛出一个错误:错误MSB4094:“service.IDL;structures.IDL”是“MIDL”任务的“Source”参数的无效值。无法将多个项传递到类型为“Microsoft.Build.Framework.ITaskItem”的参数中。C:\Program Files(x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.cppcomon.targets 317的可能重复项