.NET FrameWorkで作成されたDLL を JavaScript で使用する(1)
仕事で使っているハードウェアを、最近なんとなく解ってきたJavaScriptでいじってみたいと思い、JavaScriptでDLLの関数を呼ぶ方法を調べたが・・・。
ふつーのDLLはムリみたい*1。
基本的に ActiveXObject 関数で作成できるCOMコンポーネントのDLLのみ使用できるらしい。(今回の使用するDLLはCOMコンポーネントではないのが残念)
ただ、そのハードウェア制御用のドライバ(DLLでライブラリ提供)は .NET FrameWork 用のラッパーDLLを提供してくれているので、そこから何とかできないの?
ということで調べてみたら、なんとかできそうだということがわかった。
「できそう」というのは、まだ、DLL内のクラスをActiveXObjectとして生成することに成功した段階で、実際にDLLを動作させるまでにはいたっていない。
取り合えず必要な作業は以下。
- .NET FrameWork のインストール
- RegAsm.exe*2による対象DLLのレジストリへの登録
- RegAsm.exe /tlb オプション による対象DLLのタイプライブラリの作成&レジストリへの登録
- 対象の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のバージョンにより異なる)に配置される