簡體   English   中英

從瀏覽器運行ATL COM DLL(調用方法)

[英]Run a ATL COM DLL from a Browser (call a method)

我有一個使用ATL創建的COM對象(沒有MFC支持)

Object有一個打開Dialog的方法(完成所有其他操作)

目前我從另一個EXE調用它:

hr = CoCreateInstance(
    CLSID_MyControl,
    NULL,
    CLSCTX_INPROC_SERVER,
    IID_IMyControl,
    (void**) &pMyControl
    );

接着:

hr = pMyControl->MyMethod (ATL::CComBSTR(InputString1), ATL::CComBSTR(InputString2), &IntReturned, &IntReturned);

是否可以從瀏覽器中調用它?

如何實例化對象並從瀏覽器調用我的方法(使用params)?

有些要點可以回答你的問題:

  • 除IE或基於WebBrowser的應用程序之外,您將無法在任何瀏覽器中使用COM對象。

  • 您需要實現IObjectSafety接口以允許IE創建您的對象。 當然,對象應該是任何不受信任的源腳本安全的。 理想情況下,您應該將對象鎖定到您自己的站點列表中。 您可以使用SiteLock模板。

  • 該對象應實現IDispatch接口,以供腳本使用。 最好的方法是使用ATL的IDispatchImpl (很可能,它已經在您的代碼中完成)。

  • 示例中的MyMethod使用IntReturned兩個[out]參數。 JavaScript只允許一個輸出[out, retval]參數。 如果需要返回多個值,則必須使用VBScript。

示例(替換您的CLSID):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "">
<html>
<head>
    <title></title>
    <script type="text/vbscript">
        Option Explicit
        window.onload = GetRef("OnLoadHandler")

        Sub OnLoadHandler
            Dim InputString1
            Dim InputString2
            Dim IntReturned1
            Dim IntReturned2

            InputString1 = "a"  
            InputString1 = "b"  
            testObject.MyMethod InputString1, InputString2, IntReturned1, IntReturned

            alert "Result: " & IntReturned1 & ", " & IntReturned
        End Sub
    </script>
</head>

<body>
    <object id="testObject" classid="clsid:12345678-1234-1234-1234-1234567890AB">
        <span>Unable to create the object.</span>
    </object>
</body>
</html>

如果您沒有實現IObjectSafety ,您仍然可以將此代碼作為HTML Application運行。 將其另存為.HTA文件,並運行為C:\\Windows\\SysWOW64\\mshta.exe C:\\users\\user\\Documents\\test.hta如果您的C ++ COM DLL是32位,或作為C:\\Windows\\System32\\mshta.exe C:\\users\\user\\Documents\\test.hta如果是64位。

需要首先使用regsvr32.exe注冊COM DLL(如果可以從C ++客戶端項目中使用它,則可能已經完成了此操作)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM