2

我希望从 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 服务器定义这样的数据类型?

谢谢,

巴里

4

1 回答 1

2

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

您需要将结构包装成自动化类型。编写实现 IDispatch 的自动化服务器类,并将结构成员公开为简单自动化类型或其他自动化服务器类的属性(例如,具有 Count 和 Item 属性的集合类)。请参阅Don Box 撰写的“通过 IDispatch 传递结构”,Microsoft Systems Journal,1996 年 6 月。

于 2012-06-03T17:53:32.280 回答