.NET FrameWorkで作成されたDLL を JavaScript で使用する(1)

仕事で使っているハードウェアを、最近なんとなく解ってきたJavaScriptでいじってみたいと思い、JavaScriptDLLの関数を呼ぶ方法を調べたが・・・。
ふつーのDLLはムリみたい*1

基本的に ActiveXObject 関数で作成できるCOMコンポーネントのDLLのみ使用できるらしい。(今回の使用するDLLはCOMコンポーネントではないのが残念)

ただ、そのハードウェア制御用のドライバ(DLLでライブラリ提供)は .NET FrameWork 用のラッパーDLLを提供してくれているので、そこから何とかできないの?
ということで調べてみたら、なんとかできそうだということがわかった。

「できそう」というのは、まだ、DLL内のクラスをActiveXObjectとして生成することに成功した段階で、実際にDLLを動作させるまでにはいたっていない。

取り合えず必要な作業は以下。

  1. .NET FrameWork のインストール
  2. RegAsm.exe*2による対象DLLのレジストリへの登録
  3. RegAsm.exe /tlb オプション による対象DLLのタイプライブラリの作成&レジストリへの登録
  4. 対象のDLLを「%windir%\system32」にコピーする

以上。

最後の「対象のDLLを「%windir%\system32」にコピーする」をやらずに、任意の場所にDLLを配置する方法がとても難しい・・・らしい。
(自分はドライバ用のDLLを登録することが目的なので、system32にDLLをおき、いろんなJavaScriptから実行できたほうが都合が良いので、今回は深く調べなかった。)

この作業後に以下のコードを試し、try & catchでエラーが出ていないことを確認


function activeXtest(){
var obj;
try {
obj = new ActiveXObject("ライブラリ名.クラス名");
//[ライブラリ名]はDLLのファイル名ではない。
//"ライブラリ名.クラス名"は
//レジストリにキー"ProgId"として登録されたものが使用できる
} catch (e) {
alert("ActeiveXObject作成エラー:" + e);
}
try {
obj.メンバ関数名();
} catch (e) {
alert("メンバ関数呼び出しエラー:" + e);
}
return;
}

とりあえず、alartのダイアログボックスが表示されなかったので、大丈夫なんだろうけれども、今日は自宅で対象となるハードウェアが無いので、実際に関数が動作しているかが試せない。

・・・DLLが実際に動作するか早く試したいが、仕事が忙しいので確かめらるのが何時になることやら。

*1:逆にできちゃったら、ブラウザから間単にマシンのネイティブコード実行できたら危ないけど

*2:RegAsm.exeは.NET FrameWorkをインストールすると「%windir%\Microsoft.NET\Framework\vX.X.xxxx」(Xやxは.NET FrameWorkのバージョンにより異なる)に配置される