2012 年に初めて ActiveX コントロールを作成することになるとは思っていませんでしたが (確かにそれには正当な理由があります)、Windows 7 (x64) で実行するのに苦労しています。
ソリューション ショート ストーリー: 一部の regasm 呼び出しで /codebase が欠落しており、32 ビット プロセスと 64 ビット プロセスが混同されていましたが、標準の VS2010 コマンド プロンプトでは regasm と cscript の 32 ビット パスと 64 ビット パスが混同されていましたが、これは役に立ちませんでした。 .
長い話は次のとおりです。
私はその間を跳ね回っています
C# を使用して .Net で ActiveX コントロールを作成する
(おっと 、間違ったリンクがありました..最初に提供したリンクは、元のブログページをコピーした誰かだったようです)
C# を使用して .Net で ActiveX コントロールを作成する
と
そして、私はプロジェクトを正常に構築しているようです (後者のプロジェクトでは、リソース コンパイラの場所を正しい場所に変更する必要がありました)。
最初のプロジェクトでは、提案されたインストーラーを使用しています。2 番目のプロジェクトでは、regasm を直接使用しようとしています。
しかし、この後、すべてが下り坂になります。私はすべてのものを登録しようとしますが、次のいずれかです:
- それらをどのように登録すればよいかわかりません。または:
- それらをどのように登録すればよいかわかりません。
私のテストケースは、以下を含む単純な JScript ファイルでした
var x = new ActiveXObject( "name of object" );
次のエラーで失敗します。
test.js(1,1) Microsoft JScript ランタイム エラー: Automation Server はオブジェクトを作成できません
これがパーミッションの問題なのか、32 ビットと 64 ビットの問題なのか、その組み合わせなのかはわかりません。
ActiveX に関するヘルプを提供しているサイトの多くは、Web ページ経由でアクセスすることを想定しているため、IE のアクセス許可を調べてみました (ただし、コントロールをサード パート プログラムにロードしたいのですが)。
regasm の「framework」バージョンまたは「framework64」バージョンのどちらを使用しているかを知っています。レジストリ エントリのどこに配置するかを制御できます。また、cscript を 32 ビットまたは 64 ビットとして実行することへの参照もいくつか見てきました。呼び出された cmd シェルに応じて、レジストリが検索されます (そして、「管理者」シェルを試すだけでなく、両方の方法も試しました)。
基本的に、この時点では、自分が何をしているのか、何をすべきなのかわかりません。
私の目標は、Windows 7 x64 に ActiveX コントロールを登録し、次の方法で読み込めるようにすることです。
- デフォルトの Windows コマンド プロンプトから実行されるテスト .js スクリプト
- 同じコントロールを Excel 2007 VBA などにロードします (テストのみ)。
- コントロールをサード パート アプリケーション (Rockwell の RSView Studio) にロードし、VBA アプリケーション内でホストします (これが 32 ビット プログラムか 64 ビット プログラムかを確認する必要があります。前者だと思います)。
ノート
インストーラーを使用するプロジェクト (C# を使用して .Net で ActiveX コントロールを作成する) の場合、コードを「c:\program Files (x86)\」にインストールし、regedit で検索すると、「Computer\HKEY_CLASSES_ROOT\Wow6432Node\」の下にエントリが見つかります。 CLSID\" は、DLL が 32 ビット プロセスとしてインストールされたことを示していると思われます。32 ビットと 64 ビットの両方の cmd から cscript テストを実行しようとしましたが、どちらも失敗します。インストーラーは、実行時に「regasm /codebase」に相当するものを作成していたことに注意してください。
regasm を使用して登録しようとしたプロジェクト (C# ActiveX コントロール (CSActiveX)) には、ActiveX COM コントロールを登録するための追加コードが含まれています。このコードは、32 ビットのインプロセス サーバーの登録について言及しています (ActiveXCtrlHelpers.cs を参照)。
(ところで、私は現在 Safari/Lion でも自動修正を呪っています。小文字の "DLL" を "all" に変更し続けています)
編集 2012-08-07
私が発見したアートの答えに促されて:
標準の VS2010 コマンド プロンプトから
標準の VS2010 コマンド プロンプトで (および管理者として regasm による変更の実行を許可して) 'regasm /codebase' を実行すると、HKEY_CLASSES_ROOT\Wow6432Node\CLSID の下のレジストリにエントリがダンプされ、同じプロンプトからテスト スクリプトが失敗しました。
ただし、Excel 2007 (32 ビット) で ActiveX コントロールを確認できます。
x64 Win64 VS2010 コマンド プロンプトから
VS2010 x64 Win64 コマンド プロンプトで (再び管理者として) 実行すると、レジストリ エントリは HKEY_CLASSES_ROOT\CLSID の下に表示されましたが、今回はテスト スクリプトが同じプロンプトと標準の Windows コマンド プロンプトから機能しました (ただし、32 ビット プロンプトからは失敗します)。 )
しかし!!Excel 2007 (32 ビット) のアクティブ X コントロールが表示されない
ここで、使用している regasm を確認するために、Windows で *nix の「which」コマンドに相当するものを把握する必要があります)「where」コマンド
VS2010 と Windows 7 のコマンド プロンプトを見ると、次のようになります。
VS2010 (standard prompt): cscript => c:\windows\system32\cscript.exe
regasm => c:\windows\Microsoft.net\framework\v4.0.30319\regasm.exe
VS2010 (x64 Win 64): cscript => c:\windows\system32\cscript
regasm => c:\windows\Microsoft.net\framework64\v4.0.30319\regasm.exe
Windows 7 std. prompt: cscript => c:\windows\system32\cscript.exe
Windows 7 32 bit prompt: cscript => c:\windows\SysWOW64\cscript.exe
これはすべて、私の混乱の一部を理解できるようにし始めています。私は無意識のうちに 32 ビット システムと 64 ビット システムを組み合わせて使用してきましたが、VS2010 標準のプロンプトも役に立ちませんでした。
(そして私の最新のピーブ-VS2010はファイルをBOM付きのUTF-8として保存します)