gpt4 book ai didi

c++ - 复杂的 C++ 数据类型和 COM

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:17 28 4
gpt4 key购买 nike

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

谢谢,

巴里

最佳答案

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

您需要将结构包装到自动化类型中。编写实现 IDispatch 的自动化服务器类,并将结构成员公开为简单自动化类型或其他自动化服务器类(例如,具有 Count 和 Item 属性的集合类)的属性。参见 "Passing Structures through IDispatch" by Don Box, Microsoft Systems Journal, June 1996.

关于c++ - 复杂的 C++ 数据类型和 COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671649/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com