我希望从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服务器定义此类数据类型?
谢谢,
百里
答案 0 :(得分:2)
VBScript和JScript等脚本语言中没有结构类型,在大多数IIS应用程序中与ASP一起使用。您不能声明结构变量来接收返回值或将其传递给C ++函数。
您需要将结构包装到自动化类型中。编写实现IDispatch的自动化服务器类,并将结构成员公开为简单自动化类型或其他自动化服务器类的属性(例如,具有Count和Item属性的集合类)。见"Passing Structures through IDispatch" by Don Box, Microsoft Systems Journal, June 1996.