0

ActiveX (ATL C++) dll から Javascript を呼び出そうとしています。私が行った調査から、接続ポイントが必要です。

私のidlファイルに追加されました

[
uuid(BDBFA5F9-B2CB-43b1-A414-CB6E3B15C6C2),
("Event interface for Test")
]
_ITestEvents
    {
    properties:
    methods:
    [id(1), helpstring("method Cancel")] void Cancel([in] char* x, [in] char* y);
    };

クラスの .h ファイルに追加

class ATL_NO_VTABLE CTest :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CTest, &CLSID_Test>,
public IConnectionPointContainerImpl<CTest>,
public CProxy_ITestEvents<CTest>,
public IObjectWithSiteImpl<CTest>,
public IObjectSafetyImpl<CTest,INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>,
public IProvideClassInfo2Impl<&CLSID_Test, &__uuidof(_ITestEvents), &LIBID_Test3Lib>,
public IDispatchImpl<ITest, &IID_ITest, &LIBID_Test3Lib, /*wMajor =*/ 1, /*wMinor =*/ 0>
    {
    public:


    BEGIN_COM_MAP(Clnaxprt)
    COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
    COM_INTERFACE_ENTRY(Ilnaxprt)
    COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(IConnectionPointContainer)
    COM_INTERFACE_ENTRY(IObjectWithSite)
        COM_INTERFACE_ENTRY(IObjectSafety)
        COM_INTERFACE_ENTRY(IProvideClassInfo)
        COM_INTERFACE_ENTRY(IProvideClassInfo2)
    END_COM_MAP()

    BEGIN_CONNECTION_POINT_MAP(Clnaxprt)
        CONNECTION_POINT_ENTRY(__uuidof(_ITestEvents))
    END_CONNECTION_POINT_MAP()

Visual Studio では、メソッド名 Fire_Cancel( char * x, char * y) で作成された _ITestEvents_CP.h にコードを生成する「新しい接続ポイントを実装」しました。そして、それが私が立ち往生しているところです。Fire_Cancel を呼び出そうとしましたが、生成されたコードをデバッグするときに接続がないため、IDispatch からの呼び出しがありません。接続を作成するにはどうすればよいですか?

JavaScript がどのように機能するかはまだわかりませんが、この部分に移る前にこの部分を理解しておきたいと思います。ありがとう

4

1 に答える 1

0

私の場合、HTML と Javascript が間違っていました。「id::function_name」という表記を使用している場合は、それが object タグの後にあることを確認してください。表記が「for=id event=cancel」の場合、前後に配置可能

于 2012-05-11T21:27:14.937 に答える