复杂C++数据类型和 COM

Complex C++ data types and COM

本文关键字:COM 数据类型 C++ 复杂      更新时间:2023-10-16

我希望从ASP Classic访问dll的功能,我的理解是COM是要走的路。

与 dll 关联的 .h 头文件如下所示:

...
struct _Data;
typedef struct _Field
{
    INT  iType;
    BOOL bChanged;
    INT  iFieldId;
    INT  iInternalFieldId;  
    INT  iLenght;
    INT  iDec;
    RW iRW;
    union
    {
        DOUBLE    d;
        CHAR*     s;
        LONG      l;
        BOOL      b;
        LONG      date;
        struct _Data* data;
    }
    value;
} FIELD;
typedef struct _MetaData
{
    HANDLE hHandle;
    INT        iDatabaseId;
    INT        iFields;
    INT        iStructSize;
} META;
typedef struct _Data
{
    META  metaData;
    FIELD rgField[MAX_FIELD];
} DATA, *PDATA;
...
#ifdef __cplusplus
extern "C" 
{
#endif //__cplusplus
    __declspec(dllexport) P_DATA __stdcall CreateData(INT iDatabaseId);
    __declspec(dllexport) ERROR __stdcall GetStr(DATA* pData, INT iFieldId, CHAR** ppsValue, INT iLen);
...

因此,您可以看到函数本身很简单,但数据相当复杂。

我应该如何为我的 COM 服务器定义此类数据类型?

谢谢

巴里

脚本语言中没有结构类型,如VBScript和JScript,在大多数IIS应用程序中与ASP一起使用。不能声明结构变量来接收返回值或将其传递给C++函数。

您需要将结构包装到自动化类型中。编写实现 IDispatch 的自动化服务器类,并将结构成员公开为简单自动化类型的属性或其他自动化服务器类(例如,具有 Count 和 Item 属性的集合类(。参见Don Box的"通过IDispatch传递结构",Microsoft系统杂志,1996年6月。