Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C++;声明接口时IDL文件中的名称空间 我有一个C++语言库,在IDL文件中声明接口时,我想使用它的结构。以下是示例:_C++_Namespaces_Declaration_Idl - Fatal编程技术网

使用C++;声明接口时IDL文件中的名称空间 我有一个C++语言库,在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

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 *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的可能重复项