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

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

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

Re[11]: ライブラリを呼び出せるか、調べる方法


(過去ログ 115 を表示中)

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

■67686 / inTopicNo.1)  ライブラリを呼び出せるか、調べる方法
  
□投稿者/ jinjin (1回)-(2013/08/23(Fri) 16:32:12)

分類:[C#] 

.NET4 C# VS2010

ライブラリ(Assembly,DLL?)内のクラスにアクセスすると、

ファイルまたはアセンブリ 'NationalInstruments.DAQmx.dll'、またはその依存関係の 1
つが読み込めませんでした。指定されたファイルが見つかりません。

↑↑↑ このような例外が発生します。

この、DAQmx.dllは、VS2010 プロジェクトの”参照設定”に追加されています。
参照プロパティのパスは、

C:\Windows\Microsoft.Net\assembly\GAC_32\(略)\NationalInstruments.DAQmx.dll

★★★ このDAQmx.dll(及び、依存関係)を、"Loadできるかチェックする"良い方法はありますでしょうか?


(補足)
DAQmxは、”とある物がインストールされている環境”では動作します。
その”とある物”が、インストールされていない環境を判断したいです。


何卒よろしくおねがいします。



引用返信 編集キー/
■67687 / inTopicNo.2)  Re[1]: ライブラリを呼び出せるか、調べる方法
□投稿者/ Hongliang (88回)-(2013/08/23(Fri) 17:37:07)
必要なのは“とある物”がインストールされているかどうかであって、ライブラリを呼び出せるかどうかはその結果でしかないと思うのですが。
// 名を伏せる意味があるのでしょうか……。

.NETのアセンブリであればリフレクションで参照を巡回することは可能ですが、
・DllImportで使っているネイティブDLLが足りない
・ComImportで使っているCOMインターフェイスが登録されていない
などは、実際に呼び出してみるまで判断できないでしょう。
引用返信 編集キー/
■67688 / inTopicNo.3)  Re[2]: ライブラリを呼び出せるか、調べる方法
□投稿者/ jinjin (2回)-(2013/08/23(Fri) 17:57:01)
No67687 (Hongliang さん) に返信
> 必要なのは“とある物”がインストールされているかどうかであって、ライブラリを呼び出せるかどうかはその結果でしかないと思うのですが。
> // 名を伏せる意味があるのでしょうか……。
>
> .NETのアセンブリであればリフレクションで参照を巡回することは可能ですが、
> ・DllImportで使っているネイティブDLLが足りない
> ・ComImportで使っているCOMインターフェイスが登録されていない
> などは、実際に呼び出してみるまで判断できないでしょう。


Hongliang様
返答ありがとうございます。

”とある物”とは、NI-DAQmx Driver Software(NATIONAL INSTRUMENTS製 のドライバです)。

ドライバがインストールされているかを、判断する方法をさがすか、

Assembly.Load(""); みたいな感じで、例外を補足できればと思うのですが。。。



引用返信 編集キー/
■67690 / inTopicNo.4)  Re[3]: ライブラリを呼び出せるか、調べる方法
□投稿者/ オショウ (83回)-(2013/08/23(Fri) 21:39:58)
> ”とある物”とは、NI-DAQmx Driver Software(NATIONAL INSTRUMENTS製 のドライバです)。
>
> ドライバがインストールされているかを、判断する方法をさがすか、

  C/C++用のWin32 DLL が提供されているはずなので、そのDLLを、Win32 API の、LoadLIbrary を使って
  そのDLLをLoadしてみればよい。
  ハンドルが取れればLoadLibraryに成功したことになり、FreeLibraryすればよい。

  私は、そうやってます。

以上。参考まで
引用返信 編集キー/
■67691 / inTopicNo.5)  Re[3]: ライブラリを呼び出せるか、調べる方法
□投稿者/ Jitta (65回)-(2013/08/23(Fri) 22:22:41)
Jitta さんの Web サイト
No67688 (jinjin さん) に返信
> ■No67687 (Hongliang さん) に返信
>>必要なのは“とある物”がインストールされているかどうかであって、ライブラリを呼び出せるかどうかはその結果でしかないと思うのですが。
>>// 名を伏せる意味があるのでしょうか……。
>>
>>.NETのアセンブリであればリフレクションで参照を巡回することは可能ですが、
>>・DllImportで使っているネイティブDLLが足りない
>>・ComImportで使っているCOMインターフェイスが登録されていない
>>などは、実際に呼び出してみるまで判断できないでしょう。
>
>
> Hongliang様
> 返答ありがとうございます。
>
> ”とある物”とは、NI-DAQmx Driver Software(NATIONAL INSTRUMENTS製 のドライバです)。
>
> ドライバがインストールされているかを、判断する方法をさがすか、
>
> Assembly.Load(""); みたいな感じで、例外を補足できればと思うのですが。。。
>
>
>
コマンドラインですが、Vista 以降であれば、[pnputil -e]で、インストールされているドライバ パッケージがリストされます。
また、%SystemRoot%\inf に、「oem数字.inf」というファイルがありますが、これがインストールしたパッケージの情報です。
こいつを開いて、内容を確認する…というのは、勧めない方が良いんだろうな。
引用返信 編集キー/
■67696 / inTopicNo.6)  Re[4]: ライブラリを呼び出せるか、調べる方法
□投稿者/ tinq (4回)-(2013/08/25(Sun) 00:30:34)
.NETのマネージドライブラリなら
>Assembly.Load(""); みたいな感じで、例外を補足できればと思うのですが。。。
とありますが、それでリフクレクションを使って動的に読み込むしかないのではないでしょうか。
http://code.msdn.microsoft.com/windowsdesktop/C-4f4495bd
呼び出しの手間がかかりますが、dynamicなどを使えばある程度緩和できると思います。


引用返信 編集キー/
■67708 / inTopicNo.7)  Re[5]: ライブラリを呼び出せるか、調べる方法
□投稿者/ jinjin (3回)-(2013/08/26(Mon) 13:13:06)
Jitta様、tinq 様、オショウ様

ご返答ありがとうございます。

本件、一番手堅い方法として、
当該DLLへのアクセスを1個のクラスにまとめ、
クラスの呼び出し側で、例外を補足する。

ことにしました(例外補足用に、1層ふやしました)。


★★ 余談(その1)
 GACに登録されているDAQmx.dllを参照設定に追加すると、
 VisualStudioの実行形式フォルダ(binの下)には、
 DLLはコピーされない。

 当該APのインストーラを作ってインストールすると
 実行形式フォルダ(Program Files下)には、
 DLLがコピーされる。

 Assembly.Loadが使えなかった理由。


★★余談(その2)
 Visual Studio2012は、2010の”セットアップ プロジェクト”
 を継承していない。
 2012には、機能限定版Install Shieldが付属する。

 そして、Install Shieldでは、NIのDAQmxのセットアップを作成できない。
 当方は、コーディング、デバッグを2012で行い、
 セットアップを作るとき、2010でソリューションを読み込み作成している。

 .NET4.5を使わなければ、2010,2012でプロジェクトの下位互換が保たれている模様。



引用返信 編集キー/
■67710 / inTopicNo.8)  Re[6]: ライブラリを呼び出せるか、調べる方法
□投稿者/ とっちゃん (138回)-(2013/08/26(Mon) 15:22:51)
とっちゃん さんの Web サイト
No67708 (jinjin さん) に返信
> ★★ 余談(その1)
>  GACに登録されているDAQmx.dllを参照設定に追加すると、
>  VisualStudioの実行形式フォルダ(binの下)には、
>  DLLはコピーされない。
>
>  当該APのインストーラを作ってインストールすると
>  実行形式フォルダ(Program Files下)には、
>  DLLがコピーされる。
>
>  Assembly.Loadが使えなかった理由。
>
これは、VSのセットアッププロジェクトが本来必要ないのに
勝手に引っ張ってしまうことが原因だと思います。

VSのセットアッププロジェクトは参照されているものを過剰に取り込む傾向が強く
本来なら配布してはいけないものまで取り込んでしまうことがあります。

そのため、それらは依存関係から除外して取り込まないようにして
インストーラをビルドする必要があります。


> ★★余談(その2)
>  Visual Studio2012は、2010の”セットアップ プロジェクト”
>  を継承していない。
>  2012には、機能限定版Install Shieldが付属する。
>
>  そして、Install Shieldでは、NIのDAQmxのセットアップを作成できない。
>  当方は、コーディング、デバッグを2012で行い、
>  セットアップを作るとき、2010でソリューションを読み込み作成している。
>
こちらは、その1の逆ですね。
参照設定されているため、プログラム的には必要ですが、GACなどソリューション外に
あるものなので、ISではデフォルトでは依存関係にリストアップされても取り込みません。

GACにあるものをローカルにインストールするようにして配布していいのか
それとも、そもそも配布してしまうのがNGなのかは、当該システムを持っていないので
わかりません。

前者なら、ISでは依存関係を調査して取り込むようにすれば引っ張れると思います。
詳しいやり方はわかりませんが。。。


後者なら、不必要に取り込んでしまう旧来のVSセットアップの動作がまずいので除外するようにして
なくても動くようにする(Assembly.Loadの確認で済むならそれで)ようにする必要があります。

引用返信 編集キー/
■67711 / inTopicNo.9)  Re[7]: ライブラリを呼び出せるか、調べる方法
□投稿者/ jinjin (4回)-(2013/08/26(Mon) 15:52:00)
No67710 (とっちゃん さん) に返信


とっちゃん様

コメントありがとうございます。

当方、色々と理解が甘く、とりあえず動けばOK的に
作業しているので、色々苦労しています。

VS2010のセットアップ プロジェクトは、
手間いらずで、インストーラがつくれて
嬉しかったけど、色々難しい問題があるんですかね!

だから、VS2012では、機能が削除になったのかも。
頑張れMS インストーラの復活を祈る!


解決済み
引用返信 編集キー/
■67712 / inTopicNo.10)  Re[8]: ライブラリを呼び出せるか、調べる方法
□投稿者/ とっちゃん (139回)-(2013/08/26(Mon) 17:30:54)
とっちゃん さんの Web サイト
No67711 (jinjin さん) に返信

#本題ではない部分なので、済のままで




> VS2010のセットアップ プロジェクトは、
> 手間いらずで、インストーラがつくれて
> 嬉しかったけど、色々難しい問題があるんですかね!
>
IS-LEも手間いらずという点ではそれほど変わりません。
むしろ、VSのそれよりもしっかりとした作りなので、個人的にはISのほうがよいかな?と思います。

ただし、できることに違いがあるので、場合によってはIS-LEでは実現できなーい!なんてこともあります。
その場合は、ExpressやProfessionalなどをご購入ください。。。となるんですけどねw



> だから、VS2012では、機能が削除になったのかも。

残念ながら違います。
もともとVSI(VSセットアッププロジェクト)は2010の時点で非搭載となる予定でした(これ、2008のころに中の人にNDAで聞いてましたからねw)。
が、紆余曲折があり、VS2010では、VSIのドロップを見送り、代わりにIS-LEをバンドル(といっても別途ダウンロード)する形でリリースしています。

もちろん、対外的にはVS2010でVSIは終わりなので、次期VSが出ても、インストーラがないからという理由で、VS2010とともに社会からドロップするか
次のインストーラ(バンドルのIS-LEか、製品版あるいは、WiXなど)に引っ越してね。とアナウンスしています。


> 頑張れMS インストーラの復活を祈る!
>
さて、復活の可能性ですが、ズバリ書いておきます。

「ありません。」

もし、ストアアプリがなくなり、今まで通りアプリの配布は自分で頑張れ!となったとしても
インストーラ作成ツールが再びMS製のものを搭載するという方向にはならないと思います。

その一番大きな理由が開発リソースの問題。
VSIはUACに積極的対応をしていません。
また、Vista から追加された機能(Windows Installer 4.0から使える様々な機能)も一切対応していません。
なので、今現在でも作成できる機能はXP互換のままです。
ほかにも、MSBuildに非対応など、IDEから見ても異質な存在のままになっています。
このあたりを全部作り直さないとならないので、今の開発体制とは別に新規にチームを起こす必要があります。

で、これを解決するには。。。となると一番確実なのは何かの製品を買収。。。
なわけですが、事実上独占状態の開発ツールに新たに既存の競合製品のある分野の製品を載せるというのは
かなり厳しい問題があります(VSIはVBディストリビューションの代わりのモノなのでそれがかなっただけ)。

ISを買ってしまってもほかにもベンダーはいるのでダメですし、IS以外をとなってもダメ。
じゃぁ社内で使ってるインストーラ開発ツールを製品化すれば。。。としても
これはこれで周りから突き上げを食らうことになるので結果同様となる可能性が高いです。
(WiXが見送られた理由もこのあたりもあるみたいなので)

解決済み
引用返信 編集キー/
■67713 / inTopicNo.11)  Re[9]: ライブラリを呼び出せるか、調べる方法
□投稿者/ jinjin (5回)-(2013/08/26(Mon) 18:17:14)
No67712 (とっちゃん さん) に返信
> ■No67711 (jinjin さん) に返信
>
> #本題ではない部分なので、済のままで
>
>
>
>
> IS-LEも手間いらずという点ではそれほど変わりません。
> むしろ、VSのそれよりもしっかりとした作りなので、個人的にはISのほうがよいかな?と思います。

IS-LEでも、DAQmxを含むアプリケーションのインストーラは作れます。
ただし、それをインストールすると、色々足りないものがあってAPが動かない。
(だったかな、もう忘れてしまった)。

この問題は、正式版のISを使っても解決しない。
”2012を使うのであればWiXで”と
NIのフォーラムで、NIの方が発言している(詳細はNIのHPでどうぞ)。


で、WiXというのにチャレンジしてみましたが、
僕にはハードルが高すぎました(巨大なXMLが、目に染みました。無理)。


National Instrumentsのデータ収集/制御デバイスを、
.NET クラスライブラリ(DAQmx)で使う場合、
注意が必要です(そんなユーザーは、あまり多くないかもしれませんが)。
解決済み
引用返信 編集キー/
■67719 / inTopicNo.12)  Re[10]: ライブラリを呼び出せるか、調べる方法
□投稿者/ とっちゃん (140回)-(2013/08/27(Tue) 11:33:00)
とっちゃん さんの Web サイト
No67713 (jinjin さん) に返信

>>IS-LEも手間いらずという点ではそれほど変わりません。
>>むしろ、VSのそれよりもしっかりとした作りなので、個人的にはISのほうがよいかな?と思います。
>
> IS-LEでも、DAQmxを含むアプリケーションのインストーラは作れます。
> ただし、それをインストールすると、色々足りないものがあってAPが動かない。
> (だったかな、もう忘れてしまった)。
>
VSセットアップでできて、IS-LEでできないってのはあんまりないと思うんだけどなー。。。
少なくともインストールするファイルの制御においては。。。

おそらく必要なものをインストールするようにしていない(操作が足りない)ということでは?

DAQmx は使っていない(そもそもデバイス持ってないし)し、利用アプリのインストールに
何を要求しているかもわからないのでこちらについては何とも言えませんけど。


> この問題は、正式版のISを使っても解決しない。
> ”2012を使うのであればWiXで”と
> NIのフォーラムで、NIの方が発言している(詳細はNIのHPでどうぞ)。
>
正式版のISが、IS-Pro などを指しているのだとしたら
それでできずに、WiXではできるということはないはずです。

保持はしてませんけど、一応アンテナは張ってますからね。
基本的な部分での違いがどの程度あるのか?などはチェック済みです。

と、元IS使いで、現WiX使いな人は書いておきます。

ま、おいらの場合移行した一番大きな理由がビルド時間にあったりするので。。。
#数時間が数分になってますからねぇ。。。最新ISでどの程度早くなってるかはわかりませんが

>
> で、WiXというのにチャレンジしてみましたが、
> 僕にはハードルが高すぎました(巨大なXMLが、目に染みました。無理)。
>
XMLがわからないとWiXはその入り口に立つものきついです。
そのうえ、WindowsInstallerの生の知識も要求されます。

必要があれば覚えられる程度のものですが、それ相応の学習時間は必要だと思いますよ。

>
> National Instrumentsのデータ収集/制御デバイスを、
> .NET クラスライブラリ(DAQmx)で使う場合、
> 注意が必要です(そんなユーザーは、あまり多くないかもしれませんが)。

こちらについては、詳細がわからないのでとりあえずノーコメント。
必須コンポーネントを用意してやる必要があるような感じもしますが
詳細をたどるにはものを知らなすぎるので、適当にだとった範囲ではよくわかりませんでした。

たぶんSDKチックなものをちゃんとチェックしないとわからないと思います。
まぁそこまで行くと掲示板の受け答えの範疇超えてくるので、踏み込んでませんけどね。



引用返信 編集キー/
■67720 / inTopicNo.13)  Re[11]: ライブラリを呼び出せるか、調べる方法
□投稿者/ とっちゃん (141回)-(2013/08/27(Tue) 11:33:30)
とっちゃん さんの Web サイト
No67719 (とっちゃん さん) に返信
あ、済つけるの忘れたので、つけておきます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -