質問編集履歴
2
発生している問題・分からないこと(二つ目)の追記
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
体裁修正
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コマンド
|
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
|
-
|
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
|
-
アイテムの選択
|
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
|
-
|
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
|
-
当該
|
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
|
よろしくお願いいたします。
|