簡體   English   中英

Visual Basic-調用.net運行時

[英]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.dllInprocServer32子項,並且如果VBA運行時成功在該類型庫中創建具有指定ProgId的類型的實例,則CreateObject調用將成功並返回該實例。 否則,它將引發錯誤429並顯示“ ActiveX無法創建對象”。

暫無
暫無

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

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