投稿者 魔界の仮面弁士  (社会人) 投稿日時 2024/4/9 11:21:33
> Activator.CreateInstance メソッド
> https://learn.microsoft.com/ja-jp/dotnet/api/system.activator.createinstance?view=net-8.0
それは .NET 8.0 版のリンクですね。
.NET Framework 版のアセンブリは mscorlib.dll で、
.NET (.NET Core) 版のアセンブリは System.Runtime.dll です。

おそらくひでとさんは .NET Framework 版の WinForms プロジェクトをお使いなのでしょう。
.NET Framework のバージョンまでは読み解けませんでしたが、VB2019 をお使いである以上、
.NET 8.0 どころか、.NET 6.0 が使われていることさえ考えにくいです。
https://learn.microsoft.com/en-us/answers/questions/620284/how-to-target-net-6-0-with-visual-studio-2019

> 魔界の仮面弁士さんに、恥を忍んでお伺いしたいのですが、この関数はどこから
> 呼び出されているのでしょうか?
とくまさんもご存知の通り、エラーの起点は、
ひでとさんの「トレイ重量計算\トレイ重量計算\メニュー.vb」1103行目です。

Private Sub Excelへ出力ToolStripMenuItem_Click(ByVal sender As ObjectByVal e As System.EventArgs) Handles Excelへ出力ToolStripMenuItem.Click
        Dim i, j As Integer
        Dim xlApp As New Excel.Application
        Dim xlBooks As Excel.Workbooks = xlApp.Workbooks
        Dim xlFilePath = My.Computer.FileSystem.CurrentDirectory & "\重量計算1.xlsm"
        Dim xlBook As Excel.Workbook = xlBooks.Open(xlFilePath)
        Dim xlSheets As Excel.Sheets = xlBook.Worksheets
        Dim xlSheet As Excel.Worksheet


COM クラス ファクトリの取得中に、CO_E_SERVER_EXEC_FAILURE が発生した…という点から想像するに、
1103行目というのは恐らく、『Dim xlApp As New Excel.Application』であろうと推察しています。
.xlsm の Open 時という可能性も無くはないですが、多分、New Excel.Application の方でしょう。
(恐らくはプライマリ相互運用機能アセンブリが COM 参照されていると推察します)

この場合、As New Excel.Application() というコードは、
= DirectCast( System.Activator.CreateInstance( [Excel.Applicationを表すSytem.Type型] ) , Excel.Application)
に相当する呼び出しとなります。

Type の取得は
 Type.GetTypeFromProgID("Excel.Application")
あるいは
 Marshal.GetTypeFromCLSID(New Guid("00024500-0000-0000-C000-000000000046"))
などで得られているものと推察(たぶん後者)。


そしてこの部分が、エラーのスタックトレースにあった
> at System.Activator.CreateInstance(Type type) in f:\dd\ndp\clr\src\BCL\system\activator.cs:line 134
に相当します。一応、Reference Sourc も貼っておきますが、.NET Framework バージョンの違いなどで、行番号は一致しないかもしれません。
https://referencesource.microsoft.com/#mscorlib/system/activator.cs,132

さらにスタックを追ってみると…
> at System.Activator.CreateInstance(Type type, Boolean nonPublic) in f:\dd\ndp\clr\src\BCL\system\activator.cs:line 193
https://referencesource.microsoft.com/#mscorlib/system/activator.cs,180

> at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) in f:\dd\ndp\clr\src\BCL\system\rttype.cs:line 5476
https://referencesource.microsoft.com/#mscorlib/system/rttype.cs,5446

> at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
https://referencesource.microsoft.com/#mscorlib/system/runtimehandles.cs,239

> at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj) in f:\dd\ndp\clr\src\BCL\system\runtime\remoting\activationservices.cs:line 175
https://referencesource.microsoft.com/#mscorlib/system/runtime/remoting/activationservices.cs,155

> at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType) in f:\dd\ndp\clr\src\BCL\system\runtime\remoting\activationservices.cs:line 458
https://referencesource.microsoft.com/#mscorlib/system/runtime/remoting/activationservices.cs,443

> at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
https://referencesource.microsoft.com/#mscorlib/system/runtime/remoting/remotingservices.cs,230