请问我再typedef50.h中定义了
// 线对象
typedef struct tagLINEOBJECT {    
char cType; // 类型
char cTypeDt; // 详细类型
// 显示道路:0-无、1-隧道、2-当前地图中心所在的道路 
// 路径线:0-已行驶,1-未行驶。
char cZLevel; // 层级
char cRever; // 对齐
long nCount; // 点个数
MAPPOINT *pPntArray; // 点坐标
} LINEOBJECT, *PLINEOBJECT;// 面对象
typedef struct tagAREAOBJECT {
char cType; // 类型
char cRever; // 对齐
short siRever; // 对齐
long nCount; // 点个数
MAPPOINT *pPntArray; // 点坐标
} AREAOBJECT, *PAREAOBJECT;
这些结构体,然后把文件加载到工程中,在ATL工程中使用这些结构体如下
[id(2), helpstring("method WU_DrawsimulationViewLine")] HRESULT WU_DrawsimulationViewLine([in] HWND hwnd,[in] HDC hdc,[in] PATHOBJECT *vpPathObject);
// [id(2), helpstring("method WU_DrawsimulationViewLine")] HRESULT WU_DrawsimulationViewLine([in] HWND hwnd,[in] HDC hdc,[in] long *vpPathObject);
[id(3), helpstring("method WU_DrawArea")] HRESULT WU_DrawArea([in] HDC hdc,[in] AREAOBJECT *ppAreaObj,[in] int iiAreaNum);
[id(4), helpstring("method WU_DrawLine")] HRESULT WU_DrawLine([in] HDC hdc,[in] LINEOBJECT *ppLineObj,[in] int iiLineNum);
[id(5), helpstring("method WU_DrawPoint")] HRESULT WU_DrawPoint([in] HDC hdc,[in] POINTOBJECT *ppPointObj,[in] int iiPoinNum,[in] int FFlag);
结果在链接是Overview.idl文件中出错了
出错提示:error MIDL2025 : syntax error : expecting a type specification near "PATHOBJECT"
请问这样怎么解决?

解决方案 »

  1.   

    怎么都没人会呢?请问有哪位高手能给我点COM组件编程或者ATL编程视频吗?在下感激不尽
      

  2.   

    会ATL的人太少了,苦恼,也不知道这门语言能走多远
      

  3.   

    idl里所有的类型,必须要符合COM规范。
    把结构体改成这样
        typedef 
        [ 
            uuid(123456A0-33EB-11D4-A13A-BE2573A1120F), 
        ]
    struct tagLINEOBJECT {   
    LONG cType; // 类型
     LONG cTypeDt; // 详细类型
    // 显示道路:0-无、1-隧道、2-当前地图中心所在的道路  
    // 路径线:0-已行驶,1-未行驶。
     LONG cZLevel; // 层级
     LONG cRever; // 对齐
     LONG nCount; // 点个数
    // MAPPOINT *pPntArray; //这里不好意思,MAPPOINT这是神奇类型呀??数组的话的用SAFEARRARY,结构体参考这种类型的定义,但不能定义成指针类型!!!!
    } LINEOBJECT;
    在IDL的类型最好对齐,玩BYTE可能会编译不过去
    COM规范类型简介:
    万能类型VARIANT
    字符串BSTR
    数组SAFEARRAY