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 著「Passing Structures through IDispatch」(Microsoft Systems Journal、1996 年 6 月) を参照してください。

于 2012-06-03T17:53:32.280 に答える