C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: dllをJSで動かすには?


(過去ログ 137 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■80858 / inTopicNo.1)  dllをJSで動かすには?
  
□投稿者/ DITIL (1回)-(2016/08/15(Mon) 17:24:37)

分類:[JavaScript] 

.Netのdll(C#で実装)をNode.js でに組み込み体温ですが、
.Netのdllをどの様に実装すればよろしいですか?
引用返信 編集キー/
■80859 / inTopicNo.2)  Re[1]: dllをJSで動かすには?
□投稿者/ 真田昌幸 (28回)-(2016/08/15(Mon) 17:47:44)
No80858 (DITIL さん) に返信
> .Netのdll(C#で実装)をNode.js でに組み込み体温ですが、
> .Netのdllをどの様に実装すればよろしいですか?

jsでdllのインスタンス生成して使えばいいだけの気がしますが。

そもそもどんなアプリ構成なのですか?
jsがwebアプリなのか、WSHなのかによって、大分違う気がしますが。
引用返信 編集キー/
■80891 / inTopicNo.3)  Re[2]: dllをJSで動かすには?
□投稿者/ DITIL (2回)-(2016/08/17(Wed) 13:11:25)
> jsでdllのインスタンス生成して使えばいいだけの気がしますが。

そのインスタンス方法は、
「var 値 = new フォルダ名.Dll名({});」でいいのですか?


> そもそもどんなアプリ構成なのですか?

Node.js

> jsがwebアプリなのか、WSHなのかによって、大分違う気がしますが。

webアプリです
引用返信 編集キー/
■80893 / inTopicNo.4)  Re[3]: dllをJSで動かすには?
□投稿者/ 真田昌幸 (37回)-(2016/08/17(Wed) 13:51:25)
No80891 (DITIL さん) に返信
>>jsでdllのインスタンス生成して使えばいいだけの気がしますが。
>
> そのインスタンス方法は、
> 「var 値 = new フォルダ名.Dll名({});」でいいのですか?

??なんでフォルダ名という表現が出てきますか?

概念が理解できてないようなら、以下をまず参照してください。
http://language-and-engineering.hatenablog.jp/entry/20100705/p1#1NET-Frameworkのフォルダへ移動


引用返信 編集キー/
■80895 / inTopicNo.5)  Re[4]: dllをJSで動かすには?
□投稿者/ DITIL (3回)-(2016/08/17(Wed) 17:59:58)
すみません。
webアプリではなく、WSHでした。

混乱させて申し訳ございません

引用返信 編集キー/
■80896 / inTopicNo.6)  Re[5]: dllをJSで動かすには?
□投稿者/ 魔界の仮面弁士 (825回)-(2016/08/17(Wed) 18:33:08)
No80895 (DITIL さん) に返信
> webアプリではなく、WSHでした。

Node.js は無関係ということで良いですね?



基本的には、C# 製 DLL を ActiveX DLL として COM 公開する必要があります。
具体的な手順が知りたければ、たとえば『COM 相互運用機能に登録』という
キーワードなどで検索してみてください。

JS 側からは、スクリプトで「var obj = new ActiveXObject(progId);」でロードするか
.WSC や .WSF の <reference> タグ(あるいは <object> タグ)でロードすれば OK です。
https://msdn.microsoft.com/ja-jp/library/cc392066.aspx



もしも COM として公開していない、マネージな DLL を呼び出したいのだとしたら、
JScript からは扱えません。しかし JScript.NET からであれば可能です。

JScript.NET からその DLL を参照設定(/r オプション)してやれば、
 import System.IO;
 import YourNameSpace.Samples;
 var file : FileInfo = new FileInfo("sample.txt");
 var obj : YourClass = new YourClass(parameter1, parameter2);
のように、new して呼び出すことができます。

とはいえ、マネージ DLL を呼ぶのが目的であれば、JScipt.NET を使うのではなく
PowerShell を使った方が楽だと思います。
引用返信 編集キー/
■80903 / inTopicNo.7)  Re[6]: dllをJSで動かすには?
□投稿者/ 真田昌幸 (39回)-(2016/08/18(Thu) 09:30:45)
No80896 (魔界の仮面弁士 さん) に返信
> ■No80895 (DITIL さん) に返信
>>webアプリではなく、WSHでした。

この部分、重要です。

魔界の仮面弁士 さんが指摘しているように、
WSHなら、COMにする必要があります。
Webアプリでも、ASP.netでなく、旧ASPだった場合同様です。

COMだとレジストリの問題が出てくるので、
.Netの言語同士よりかなりややこしいことをまず認識してください。

> とはいえ、マネージ DLL を呼ぶのが目的であれば、JScipt.NET を使うのではなく
> PowerShell を使った方が楽だと思います。

技術的には私もそう思います。
Win10からWSHのサポート切られるらしいですし。

問題はJavaScript側の処理がどれくらいのボリュームがあるかかなと。
ただCallするだけのイメージなら、PowerShellもC# Likeな構文なので、
JavaScriptからの移植の敷居も低いと思います。

が、JavaScript自体で複雑なことをしているなら、
PowerShellの情報が他の.Net系言語より少ないので躊躇することにはなるでしょう。
世の中WSHがいまだ多いののもそれが理由な気がします。

VB6のアプリがいまだに多いのと似たような現象かと。
VB.netへのマイグレ案件が.net創世記よりむしろ10年以上たった今の方が多いくらいですから。



引用返信 編集キー/
■80904 / inTopicNo.8)  Re[5]: dllをJSで動かすには?
□投稿者/ PANG2 (138回)-(2016/08/18(Thu) 10:34:48)
No80895 (DITIL さん) に返信
> すみません。
> webアプリではなく、WSHでした。
>
> 混乱させて申し訳ございません
>

ますます混乱します。
どうやって WSH で Node.js を動かすのでしょうか?
引用返信 編集キー/
■80909 / inTopicNo.9)  Re[6]: dllをJSで動かすには?
□投稿者/ 魔界の仮面弁士 (828回)-(2016/08/18(Thu) 12:32:21)
No80896 (魔界の仮面弁士) に追記
>>webアプリではなく、WSHでした。
> Node.js は無関係ということで良いですね?

C# の DLL を呼び出すのが、WSH なのか Node.js なのかハッキリしませんが、
仮に Node.js 側で実行させたいという話だとしたら、
npm install win32api しておけば、require('win32api') で
呼び出せるかも知れません。試していませんけれども。
https://www.npmjs.com/package/win32api

この場合、C# 側は、Install-Package UnmanagedExports しておいてから
メソッドに [RGiesecke.DllExport.DllExport] の属性を付けておき、
関数を外部にエクスポートしておく必要がありそうです。
http://bit.ly/2b0INzQ

あるいは、C# 側を ActiveX DLL にしておいて、Node.js 側で
https://www.npmjs.com/package/win32com
https://www.npmjs.com/package/win32ole
を利用することでも呼び出せる…かも?
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -