質問編集履歴

2

発生している問題・分からないこと(二つ目)の追記

2024/10/04 04:03

投稿

OhaseO
OhaseO

スコア3

test CHANGED
File without changes
test CHANGED
@@ -3,7 +3,7 @@
3
3
  その中で、C++ベースのActiveXコントロールを追加する必要があるのですが、アクセス違反が発生してしまいます。
4
4
 
5
5
  ### 発生している問題・分からないこと
6
- **一つ目**
6
+ - **一つ目**
7
7
  aximpコマンドで生成したAx*.dllを参照に追加し、Loadイベントでnew()およびthis.Controls.Add()すると、this.Controls.Add()の箇所で下記が発生してしまいます。
8
8
  0xC0000005: 場所 0x0CBF10DC の実行中にアクセス違反が発生しました
9
9
 
@@ -23,9 +23,42 @@
23
23
  + ActiveXAmbientBackColor 'this.ActiveXAmbientBackColor' は型 'System.NotSupportedException' の例外をスローしました System.Drawing.Color {System.NotSupportedException}
24
24
  + ActiveXAmbientFont 'this.ActiveXAmbientFont' は型 'System.NotSupportedException' の例外をスローしました System.Drawing.Font {System.NotSupportedException}
25
25
 
26
- **二つ目**
26
+ - **二つ目**
27
27
  アイテムの選択でActiveXコントロールをツールボックスに追加し、フォームにD&Dすると、下記が発生してしまいます。
28
- コンポーネント 'AxHost' を作成できませんでした。エラーメッセージ: 'サーバーへの接続が失われました。'
28
+ - コンポーネント 'AxHost' を作成できませんでした。エラーメッセージ: 'サーバーへの接続が失われました。'
29
+ - コンポーネント 'AxHost' を作成できませんでした。エラーメッセージ: 'Microsoft.DotNet.DesignTools.Client.DesignToolsServerException:ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。(0x8007045A)
30
+ このとき、Visual Studioのメニューのツール-オプション-Windowsフォームデザイナー-全般-ログ記録レベルをVerboseにし、出力ウィンドウを確認してみました。
31
+
32
+ **ドロップ前の抜粋(createはできている?)**
33
+ [11:39:16.903232] trce: Attempting to create ActiveX ToolboxItem for {GUID(念のため省略)}.
34
+ [11:39:16.903232] trce: Sending request: ActiveX/IsControlSupported
35
+ [11:39:16.918870] trce: ActiveX/IsControlSupported took 00:00:00.0016753.
36
+ [11:39:16.918870] trce: Sending request: ActiveX/GetControlVersionString
37
+ [11:39:16.918870] trce: ActiveX/GetControlVersionString took 00:00:00.0020398.
38
+ [11:39:16.922386] trce: ActiveX ToolboxItem successfully created for {GUID(念のため省略)}.
39
+ [11:39:16.922386] trce: Sending request: Input/InputMessage
40
+ [11:39:16.922386] trce: Input/InputMessage took 00:00:00.0019627.
41
+
42
+ **ドロップ後の抜粋**
43
+ [11:40:03.392478] trce: Attempting to create ActiveX ToolboxItem for {GUID(念のため省略)}.
44
+ [11:40:03.392478] trce: Sending request: ActiveX/IsControlSupported
45
+ [11:40:03.392478] trce: ActiveX/IsControlSupported took 00:00:00.0011153.
46
+ [11:40:03.392478] trce: Sending request: ActiveX/GetControlVersionString
47
+ [11:40:03.392478] trce: ActiveX/GetControlVersionString took 00:00:00.0010825.
48
+ [11:40:03.392478] trce: ActiveX ToolboxItem successfully created for {GUID(念のため省略)}.
49
+ [11:40:03.392478] trce: Sending request: Transactions/Open
50
+ [11:40:03.392478] trce: Transactions/Open took 00:00:00.0013603.
51
+ [11:40:03.392478] trce: Notifying 1 'Undo/UndoUnitCreated' handlers
52
+ [11:40:03.392478] trce: 'Undo/UndoUnitCreated' notification received: ツール 'AxHost' でコンポーネントを作成しています。.5bf92b0d-fb14-4256-a04b-bbecadc30608
53
+ [11:40:03.392478] trce: Notifying 1 'Transactions/TransactionOpening' handlers
54
+ [11:40:03.392478] trce: Notifying 1 'Transactions/TransactionOpened' handlers
55
+ [11:40:03.392478] trce: Sending request: Types/FindTypeUsingClsid
56
+ [11:40:03.392478] trce: Types/FindTypeUsingClsid took 00:00:00.0010848.
57
+ [11:40:03.392478] trce: Sending request: DesignerHosts/CreateComponent
58
+ [11:40:10.323256] trce: DesignerHosts/CreateComponent took 00:00:06.9258470.
59
+ [11:40:10.323256] fail: Request failures: DesignerHosts/CreateComponent.
60
+ Microsoft.DotNet.DesignTools.Client.DesignToolsServerException: ダイナミック リンク ライブラリ (DLL) 初期化ルーチンの実行に失敗しました。 (0x8007045A)
61
+
29
62
  ※ツールボックスへの追加はできているのですが、フォームへの追加はできていない状況です。
30
63
 
31
64
  ### 試したこと・調べたこと

1

体裁修正

2024/09/27 08:32

投稿

OhaseO
OhaseO

スコア3

test CHANGED
File without changes
test CHANGED
@@ -1,70 +1,56 @@
1
1
  ### 実現したいこと
2
2
  あるアプリケーションをVB6ベースからC#ベースへ移行しています。
3
- その中で、C++ベースのActiveXコントロールを追加する必要があるのですが、アクセス違反が発生し、追加できていません
3
+ その中で、C++ベースのActiveXコントロールを追加する必要があるのですが、アクセス違反が発生してしまいま
4
4
 
5
5
  ### 発生している問題・分からないこと
6
- いくつかの方法を試しました。
7
-
8
- 一つ目
6
+ **一つ目**
9
- ---
10
- aximpコマンドにより生成したAx*.dllを参照に追加し、Loadイベントでnew()およびthis.Controls.Add()を指令すると、this.Controls.Add()の箇所で下記が発生します。
7
+ aximpコマンド生成したAx*.dllを参照に追加し、Loadイベントでnew()およびthis.Controls.Add()すると、this.Controls.Add()の箇所で下記が発生してしいます。
11
8
  0xC0000005: 場所 0x0CBF10DC の実行中にアクセス違反が発生しました
12
9
 
10
+ 気になっている点の一つとして、new()の後、this.Controls.Add()の前に当該インスタンスの中身を確認すると、Enabledプロパティの箇所で下記が発生してしまいます。
13
11
 
14
- 気になっている点の一つとして、new()の後、this.Controls.Add()の前に当該インスタンスの中身を確認すると、Enabledプロパティの箇所で下記が発生します。
15
12
  'VS2022NET80ActiveX.exe' (Win32): 'C:\Windows\SysWOW64\sxs.dll' が読み込まれました。
16
13
  0x031F8D28 で例外がスローされました (VS2022NET80ActiveX.exe 内): 0xC0000005: 場所 0x031F8D28 の実行中にアクセス違反が発生しました
17
14
  共通言語ランタイムは、この例外で停止できません。一般的な原因は、正しくない COM 相互運用機能のマーシャリングやメモリの破損などです。さらに調べるには、ネイティブのみのデバッグを使用します。
18
15
  プログラム '[11632] VS2022NET80ActiveX.exe' はコード 3221225477 (0xc0000005) 'Access violation' で終了しました。
19
16
 
20
-
21
- そのとき、例えば、下記のようなプロパティで例外をスローしていす。
17
+ Enabledプロパティを確認する前、例えば、下記のようなプロパティでも「例外をスローしました」と表示されている状況です。
22
18
  + AssertTime 'this._axNetMTrend.AssertTime' は型 'System.Windows.Forms.AxHost.InvalidActiveXStateException' の例外をスローしました System.DateTime {System.Windows.Forms.AxHost.InvalidActiveXStateException}
23
19
  + CallUpID 'this._axNetMTrend.CallUpID' は型 'System.Windows.Forms.AxHost.InvalidActiveXStateException' の例外をスローしました string {System.Windows.Forms.AxHost.InvalidActiveXStateException}
24
20
  + CtlEnabled 'this._axNetMTrend.CtlEnabled' は型 'System.Windows.Forms.AxHost.InvalidActiveXStateException' の例外をスローしました bool {System.Windows.Forms.AxHost.InvalidActiveXStateException}
25
21
 
26
-
27
- また例えば、当該インスタンスの親のthis(ActiveXコントロール追加しようしているフォーム?)の下記のようなプロパティでも例外をスローしていす。
22
+ そのとき、当該インスタンスの親のthisの中身確認する、例えば、下記のようなプロパティでも例外をスローしました」と表示されている状況です。
28
23
  + ActiveXAmbientBackColor 'this.ActiveXAmbientBackColor' は型 'System.NotSupportedException' の例外をスローしました System.Drawing.Color {System.NotSupportedException}
29
24
  + ActiveXAmbientFont 'this.ActiveXAmbientFont' は型 'System.NotSupportedException' の例外をスローしました System.Drawing.Font {System.NotSupportedException}
30
25
 
31
- 二つ目
26
+ **二つ目**
32
- ---
33
- アイテムの選択によりコントロールをツールボックスに追加し、フォームにD&Dすると、下記が発生します。
27
+ アイテムの選択でActiveXコントロールをツールボックスに追加し、フォームにD&Dすると、下記が発生してしいます。
34
28
  コンポーネント 'AxHost' を作成できませんでした。エラーメッセージ: 'サーバーへの接続が失われました。'
29
+ ※ツールボックスへの追加はできているのですが、フォームへの追加はできていない状況です。
35
30
 
31
+ ### 試したこと・調べたこと
32
+ 当該ActiveXコントロール(C++ベースの.dll)から呼び出していると思われる別のActiveXコントロール(VB6ベースの.ocx)については、一つ目の方法でも二つ目の方法でも追加できているようですので、当該ActiveXコントロール特有の問題と考えています。
36
33
 
37
-
38
- ### 該当のソースコード
34
+ 移行元VB6のソースコードは素直です。
39
-
35
+ したがって、ラッパ等の意識していない箇所が、VB6の場合はよしなに対応していた可能性も考えています。
40
36
  ```VB6のソースコードを要約したもの
41
37
  Private WithEvents control As VBControlExtender
42
38
  Set control = Me.Controls.Add("foo.bar", "baz")
43
39
  ```
44
40
 
45
- ### 試したこと・調べたこと
46
- - [x] teratailやGoogle等で検索した
47
- - [x] ソースコードを自分なりに変更した
48
- - [x] 知人に聞いた
49
- - [ ] その他
50
-
51
- ##### 上記の詳細・結果
52
- 当該ActiveXコントロール(C++ベースのdll)から呼び出していると思われるActiveXコントロール(VB6ベースのocx)もあるのですが、そちらについては、一つ目の方法でも二つ目の方法でも追加できているようですので、ActiveXコントロールの追加方法については問題ないと思っています。
53
- したがって、当該ActiveXコントロール特有の問題と考えています。
54
-
55
- また、移行元VB6のソースコードは素直であるこに加え、気になるEnabledプロパティはVARIANT_BOOL型を扱っているためランタイムよるマーシャリングの問題を疑いもししたが、ドキュメントによるとSystem.Booleanにマーシャリングされるようですので、また別の問題とも思っているところです。
41
+ なぜか例外トリガとなるEnabledプロパティはVARIANT_BOOL型を扱っているため少し気はなりが、ドキュメントによるとSystem.Booleanにマーシャリングされるようですので、点については問題ない考えていす。
42
+ 強いて言えば、プロパティを設定する順番に依存性があると今回のようなことになりうるだろうか?とは思ったりしています。
56
43
 
57
44
  ### 補足
58
- #開発環境
45
+ **開発環境**
59
46
  Visual Studio 2022
60
47
  .NET 8.0
61
48
  C# 12.0
62
49
  プラットフォームターゲット:x86
63
- 当該dllは32bit版であり、32bit版のregsvr32コマンドによりレジストリに登録しています。
50
+ 当該ActiveXコントロールは32bit版であり、32bit版のregsvr32コマンド登録しています。
64
51
 
65
- 当該ActiveXコントロールを再コンパイルしようと思いましたが、多くのエラーが発生している状態です。
52
+ 当該ActiveXコントロールを再コンパイルしようと思いましたが、多くのエラーが発生しす。
66
- 行数も数万行あり、this.Controls.Add()の箇所で例外が発生しているとなるとどこから確認すれば良いのかも難しく、少しでも原因の可能性のある点についてのあたをつけたい次第です。
53
+ 行数も数万行あり、this.Controls.Add()の箇所で例外が発生しているとなるとどこから確認すれば良いのかも分からず、少しでも原因を絞りたい次第です。
67
54
 
68
- 一つ目の方法ではnew()はできていそうだが二つ目の方法では'AxHost' を作成できていないようですのでそもそもラップできていないのか、ラップできていないのであれば原因として考えられることは何か、Enabledプロパティを確認しようとすると例外が発生するのは何か考えられる理由があるのか等、
69
55
  少しでも何か気づいたことがあれば、ご教授いただけると助かります。
70
56
  よろしくお願いいたします。