我在ATL中的IDL文件中通过
typedef
[
uuid(3131824A-3D6D-41F9-B42B-8AA6677525F9),
version(1.0),
helpstring("自定义数据类型")]
struct PT
{
ULONG x;
ULONG y;
}PT;library ShowFont3Lib
{
importlib("stdole2.tlb");    
struct PT;//自定义数据类型...........................
...................
这样来自定义了数据类型,
然后在我的接口中来使用这个数据类型,
在ATL编译没有报错,但是在测试的时候就报错!!!
error C2061: 语法错误 : 标识符“PT”
1>g:\项目\mfc_项目\testshowfont\testshowfont\colorfont3.h(152) : error C2061: 语法错误 : 标识符“PT”
1>g:\项目\mfc_项目\testshowfont\testshowfont\colorfont3.h(138) : error C2065: “newValue”: 未声明的标识符
怎么来使用啊??
高手指点!!!

解决方案 »

  1.   

    typedef struct PT
    {
    ULONG x;
    ULONG y;
    }PT; 
      

  2.   

    library ShowFont3Lib 

    importlib("stdole2.tlb"); struct PT 

    ULONG x; 
    ULONG y; 
    };
      

  3.   

    改成这样了,但是还是报错,应该是在测试的MFC dialog程序里面,没有声明这个变量!!!
    不知道如何处理这个情况!!!
      

  4.   

    [propget, id(15), helpstring("属性 PicCoordinate")] HRESULT PicCoordinate([in] ULONG uItemId, [out, retval] PT* pt);
    [propput, id(15), helpstring("属性 PicCoordinate")] HRESULT PicCoordinate([in] ULONG uItemId, [in] PT pt);
    };
    我在接口里面使用到了这个数据类型!
    在测试的MFC程序中,报错无法找到这个数据类型的声明!
      

  5.   

    MFC dialog中也要定义这个typedef struct PT
    {
    ULONG x;
    ULONG y;
    }PT;
      

  6.   

    参数传递是对了的!!
      PT pt;
    pt.x = 110;
    pt.y = 110;
    m_ColorFont.put_TextCoordinate(0,pt);
      

  7.   

    put_TextCoordinate 的参数确定是你传递的类型?
      

  8.   

    void put_TextCoordinate(unsigned long uItemId, PT newValue)
    {
    static BYTE parms[] = VTS_UI4 VTS_UNKNOWN ;
    InvokeHelper(0xd, DISPATCH_PROPERTYPUT, VT_EMPTY, NULL, parms, uItemId, newValue);
    }
    这个是MFC生成包装类!!!
    [propget, id(13), helpstring("属性 TextCoordinate")] HRESULT TextCoordinate([in] ULONG uItemId, [out, retval] PT* pt);
    [propput, id(13), helpstring("属性 TextCoordinate")] HRESULT TextCoordinate([in] ULONG uItemId, [in] PT pt);
    这是我接口方法的定义!!!
      

  9.   

     struct PT pt;
    pt.x = 10;
    pt.y = 10;
    m_ColorFont.put_TextCoordinate(0,pt);
    调用代码
    MFC中定义的PT
    #ifndef GLOBAL_H
    #define GLOBAL_H 0x2009typedef struct PT
        {
          ULONG x;
          ULONG y;
        }PT; 
     
    #endif
    IDL中的定义!!
    typedef 
    [
    uuid(3131824A-3D6D-41F9-B42B-8AA6677525F9),
    version(1.0),
    helpstring("自定义数据类型")]
    struct PT
    {
    ULONG x;
    ULONG y;
    }PT;
      

  10.   

    在idl这么定义typedef struct 
    {
    long lElement;
    } MYSTRUCT;[id(1), helpstring("method test")] HRESULT TestStruct([in] MYSTRUCT myStruct)STDMETHODIMP CWzd::Structs1(MYSTRUCT myStruct, IUnknown *myClass)
    {}
    //////////////
    客户端
    MYSTRUCT myStruct;
    pPtr->Structs1(myStruct);