[英]Visual Basic - invoking .net runtime
我正在嘗試從VBA(Word / Excel)從.net運行時調用對象。 這是oT = CreateObject("System.Text.UTF8Encoding")
: oT = CreateObject("System.Text.UTF8Encoding")
但不是這樣: CreateObject("System.Management.Automation.Runspaces.RunspaceFactory")
錯誤是:運行時錯誤'429'; ActiveX組件無法創建對象
我不了解的是Excel / Word如何確定哪些類公開,哪些不公開
您在調用CreateObject
時指定的參數不是命名空間 ,而是ProgId
-COM用來在Windows注冊表中找到注冊的類(及其定義的庫以及該庫的位置)的字符串。
如果沒有ProgId
值為System.Management.Automation.Runspaces.RunspaceFactory
的已注冊COM類型,則ActiveX無法創建該對象。
如果沒有用於命名空間的COM類型庫(即,該程序集未注冊用於COM互操作),則您正在嘗試讓COM理解它不能實現的.NET /托管代碼。
我不了解的是Excel / Word如何確定哪些類公開,哪些不公開
Excel / Word /任何主機應用程序都與它無關,它是VBA自己的運行時加載COM類型,並且是Windows注冊表,其中包含已注冊所有內容的ProgId
。
如果在HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID
下的注冊表中搜索Scripting.Dictionary
,最終將找到名為{EE09B103-97E0-11CF-978F-00A02463E06F}
項,其ProgID
子項的值為Scripting.Dictionary
和一個值為C:\\Windows\\system32\\scrrun.dll
的InprocServer32
子項,並且如果VBA運行時成功在該類型庫中創建具有指定ProgId
的類型的實例,則CreateObject
調用將成功並返回該實例。 否則,它將引發錯誤429並顯示“ ActiveX無法創建對象”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.