生成了一个MFC APPWizard DLL 工程
要传出一个自定义的数据类型
比如
struct mydata{
    double a;
    double b;
}
怎么办?

解决方案 »

  1.   

    你可以把mydata 强制转化为一个BYTE数组,然后再转化为VARIANT类型。具体实现,你可以看MSDN
      

  2.   

    用ATL创建COM DLL组件时,在IDL文件里面定义一个结构体,并分配一个GUID给它。只需要单个元素时,用一般的指针就可以了,但是如果需要数组的话,用SafaArray是一个办法。
      

  3.   

    需要单个元素时具体该怎么办呢
    例如函数
    void fun(VARIANT FAR* pInfo)
    我怎么把mydata型的数据赋给参数pInfo传出呢
      

  4.   

    neweb(永不言败),你好,能给举个例子吗,小弟刚学,比较菜,谢谢先!
      

  5.   

    struct mydata{
        double a;
        double b;
    }
    //打包
    extern mydata md;
    VARIANT v;
    v.vt = VT_UI1 | VT_ARRAY;
    SAFEARRAYBOUND bound;
    DWORD dwLen = sizeof(mydata);
    bound.cElements = dwLen; // Set up size of array
    bound.lLbound = 0;
    pFld->parray = SafeArrayCreate(VT_UI1, 1, &bound); // Create it
    void* pDest;
    SafeArrayAccessData(v.parray, &pDest);
    memcpy(pDest, &md, dwLen); // Copy into array
    SafeArrayUnaccessData(pFld->parray);//解包
    extern VARIANT v;
    mydata md;
    void* pDest;
    SafeArrayAccessData(v.parray, &pDest);
    memcpy(&md, pDest, v.parray->rgsabound->cElements); // Copy into array
    SafeArrayUnaccessData(vFld.parray);
      

  6.   

    好像是要在VB中使用自定义的数据类型,我想:还是最好建立一个
    strcut mydata的封装自动化对象,a,b作为该对象的属性,返回IDispatch*
    这样才符合COM的原则,而且这样的对象在VC中也可以使用