CreateObject
を起動すると、名前空間ないときに指定する引数されていない方法です、それはProgId
です - COMが登録されたクラス(およびそれらが定義されているライブラリ、およびそのライブラリがある場所)をWindowsレジストリに配置するために使用する文字列です。
ProgId
の値がSystem.Management.Automation.Runspaces.RunspaceFactory
の登録済みCOMタイプがない場合、ActiveXはそのオブジェクトを作成できません。
名前空間のCOMタイプライブラリがない(つまり、アセンブリがCOM相互運用機能用に登録されていない)場合は、COMに.NET /管理コードを理解させようとしています。私は理解していないことはエクセル/ワードはクラスが公開されるかを決定し、
エクセル/ワード/どんなホストアプリケーションは、それとは何の関係もありませんされていない、それはだ方法です
COMタイプをロードするVBA独自のランタイム、登録されているすべてのもののProgId
を含むWindowsレジストリです。
あなたはHKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID
下Scripting.Dictionary
のためのあなたのレジストリを検索した場合、あなたは最終的にScripting.Dictionary
の値とC:\Windows\system32\scrrun.dll
の値を持つInprocServer32
サブキーを持つProgID
サブキーで、{EE09B103-97E0-11CF-978F-00A02463E06F}
という名前のキーを見つけることができますし、VBAランタイムがで成功した場合その型ライブラリに指定されたProgId
を持つ型のインスタンスを作成すると、CreateObject
の呼び出しが成功し、そのインスタンスが返されます。それ以外の場合は、エラー429が発生し、「ActiveXはオブジェクトを作成できません」と表示されます。
シンプル:Excel/Wordはリモートから関与することさえありません。これはVBEの仕事であり、ホストアプリケーションの仕事ではありません。 –
VBEはアクセス可能なものとそうでないものをどのように知っていますか? – Konrads
.NETクラスのサブセットのみが[ComVisible(true)]です。 .NET 1.0に入っていたほとんどのものは、プログラマーに.NETの勢いを移すことを依頼することが依然として重要で、彼らが持っているすべてのものを書き直すことを強いられていませんでした。独自の[ComVisible]ラッパーを作成する必要があります。 –