我想在ATL项目的IDL文件中使用别的头文件中的枚举类型和结构体该怎么使用?
[id(4), helpstring("方法SetInfoResolution")] HRESULT SetInfoResolution([in] INT iOperationMode, [in] ResolutionMode pResolution,[out,retval]VARIANT_BOOL* bRes); ResolutionMode是个枚举类型是在sixdefinitions.h中定义的[id(6), helpstring("方法GetOffsetCalibInfo")] HRESULT GetOffsetCalibInfo([in] INT pOperationMode,[in] INT iOffsetMode,[in,out]CalibInfo* pCalibInfo);CalibInfo是个结构体和ResolutionMode都是在sixdefinitions.h中但是CalibInfo中又包括了枚举类型和一个time_t类型头文件如下:
#ifndef SIX_DEFINITIONS_H
#define SIX_DEFINITIONS_H
#include <time.h>
#include <string>
namespace SiX {
/************************************************************************/
/* typedefs */
/************************************************************************/
typedef unsigned short SiX_Pixel;
typedef SiX_Pixel* SiX_Image;
/************************************************************************/
/* Constants */
/************************************************************************/
#define DM_CALIB_OPERATION_MODE_FULL 0
#define DM_CALIB_OPERATION_MODE_BINNING 1
#define INPUT_PINS 2
#define OUTPUT_PINS 2
#define PIXEL_MAX_VAL 4095
enum ResolutionMode
{
ResolutionFull,
Resolution2X2,
Resolution_count // <noparse>
};
enum CalibrationState
{
CalibStateValid,
CalibStateExpired,
CalibStateNotExist
};
#define SYSTEM_INFO_FIELD_SIZE 16struct CalibInfo
{
CalibrationState eCalibState;
time_t  CalibTime;
int  iTemperature1;
int  iTemperature2;
         char sDetectorSerialNumber[SYSTEM_INFO_FIELD_SIZE+1];
};}请大家来帮帮忙 我该怎么使用?分不够可以再加 拜托各位了

解决方案 »

  1.   

    如何在接口定义语言IDL中定义自定义结构体类型
      

  2.   

    用VARAINT 等类型,做接口,然后在函数内部再进行转换处理等
      

  3.   

    你这样做是自己申明了一个枚举类型或者结构体和在sixdefinitions.h中的已经不是同一个了
      

  4.   

    VARAINT 类型和结构体之间如何转换呢?
      

  5.   

    VARAINT支持SAFEARRAY,然后把结构体的成员一个个插入数组,反之一样
      

  6.   

    感谢你的热心回答 我还想问一下在ATL项目的IDL文件中真的不可以引入sixdefinitions.h文件吗?要是能直接用的话省掉很多麻烦了
      

  7.   

    IDL是接口定义文件,一般不要直接包含其他自定义h文件
      

  8.   

    谢谢 一开始我是在IDL文件中申明的结构体,但是time_t我不知道怎么声明?
    typedef struct 
    {
    CalibrationState eCalibState;
    time_t  CalibTime;
    int  iTemperature1;
    int  iTemperature2;
        char sDetectorSerialNumber[SYSTEM_INFO_FIELD_SIZE+1];
    }CalibInfo;这个结构体如果插入到SAFEARRAY中可以吗?能否给点示范代码呢?我第一次写这个东西 万分感谢
      

  9.   

    请教大家time_t在idl中如何声明????
    拜托大家了
      

  10.   

    用VARAINT 等类型,做接口,然后在函数内部再进行转换处理等