teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

確認するポイントの追記

2018/08/09 12:10

投稿

hmmm
hmmm

スコア818

answer CHANGED
@@ -15,4 +15,60 @@
15
15
  メニューの[Open Executable]からregsvr32を問題のocxを引数に指定して起動する。
16
16
  仕掛けておいたDebugBreakで停止するのであとはステップ実行して調べる。
17
17
 
18
- Windbgの使い方が分からない場合はC++でDllRegisterServerを実行するEXEを作成してVisual Studioなどでデバッグする。
18
+ Windbgの使い方が分からない場合はC++でDllRegisterServerを実行するEXEを作成してVisual Studioなどでデバッグする。
19
+
20
+ -----
21
+ 確認するポイントの追記
22
+
23
+ タイプライブラリは.idlから生成されます。
24
+ 生成された.tlbファイルは.rcファイル内で
25
+ 1 TYPELIB "MFCActiveXControl1.tlb"
26
+ のような命令でリソースIDが1として埋め込まれます。
27
+
28
+ まずは.idlファイルがなければプロジェクトに追加します。
29
+ これはもともとのvc6.0のプロジェクト内にあったはずです。
30
+ プロパティでファイルの種類がidlになっていることを確認します。
31
+ ![イメージ説明](292e7bd0d55755f6bd5b403fbf244cb7.png)
32
+
33
+ 次にプロジェクトのプロパティでMIDLの設定を見ます。
34
+ タイプライブラリが生成する設定になっていることを確認します。
35
+ ![イメージ説明](b9446aa2fb8fbbb65bfa71bcbc48ce4f.png)
36
+
37
+ リソースファイルのプロパティでファイルの種類を確認します。
38
+ ![イメージ説明](87fc633b89003c4686559c15976985f5.png)
39
+
40
+ もともとrcファイルに TYPELIBを埋め込む命令が書いてあって
41
+ .tlbファイルがない場合リソースコンパイラでエラーになるはずです。
42
+ ですので、.rcファイルも怪しい気がします。
43
+ .rcファイルをコードの表示で直接開きます。(もしくはメモ帳などで直接開く)
44
+
45
+ ```
46
+ //最初のほうに以下のようなブロックがあります。
47
+ //これは[リソースファイルのインクルード]の[コンパイル時に追加するファイル]
48
+ //の内容が登録されます。
49
+ 3 TEXTINCLUDE
50
+ BEGIN
51
+ "1 TYPELIB ""MFCActiveXControl1.tlb""\r\n"
52
+ "\0"
53
+ END
54
+
55
+ //終わりのほうに以下のようなインクルードの内容が展開された内容があります。
56
+ //こちらが実際にリソースコンパイラによって処理される命令です。
57
+ //これはリソースファイルをGUIから変更すると3 TEXTINCLUDE
58
+ //の内容をもとに自動生成されます。
59
+ //これが存在しないような気がします。
60
+
61
+ #ifndef APSTUDIO_INVOKED
62
+ /////////////////////////////////////////////////////////////////////////////
63
+ //
64
+ // Generated from the TEXTINCLUDE 3 resource.
65
+ //
66
+ 1 TYPELIB "MFCActiveXControl1a.tlb"
67
+
68
+ /////////////////////////////////////////////////////////////////////////////
69
+ #endif // not APSTUDIO_INVOKED
70
+
71
+ ```
72
+
73
+ 一度ActiveXを作成するプロジェクトを作成して
74
+ 自動で生成されるファイルや設定を見比べてみるといいと思います。