[英]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.