トップ回答者
外部のサブルーチンを選択して呼び出したのですが

質問
-
久しぶり(3年ぶりぐらいかな)にフォーラムに来たら、インタフェースが全然変わっていて、何をどうすれば良いのか全く分かりません。過去ログとかそんな概念も今は無いのでしょうか?と、いうことで、質問を書いてしまいます。
C#を使っています。
あるサブルーチンの処理を、外部に出して、色々の人にその作成をまかせたいと思っています。
そして、必要に応じてそのルーチンを指定して呼び出したいというのが希望です。
また、そのルーチンはwebからも使えるようにしたいという欲望も持っています。
DLLで作るのかと思いましたが、C#で使用のDLLの説明(Webで検索した限り)には、何か歯切れの悪い感じがしています。
なるべく簡単にしたいのですが、どういう実装方法が良いのでしょうか?
呼び出し側も、呼ばれる側も C#で作りたいと考えています。
AKAMATA
回答
-
久しぶり(3年ぶりぐらいかな)にフォーラムに来たら、インタフェースが全然変わっていて、何をどうすれば良いのか全く分かりません。過去ログとかそんな概念も今は無いのでしょうか?
”保存されているだけで書き込めない過去ログ”という考えはありませんが、今までの書き込みはある程度保持されています。(MSDN フォーラム設立以降のもの)
MSDN フォーラム全体で検索などのテキストボックスから探したり、Google などの検索エンジンで探したりすることになりますね。あるサブルーチンの処理を、外部に出して、色々の人にその作成をまかせたいと思っています。
そして、必要に応じてそのルーチンを指定して呼び出したいというのが希望です。
また、そのルーチンはwebからも使えるようにしたいという欲望も持っています。切り出して別のクラスライブラリにして作ってもらうことはありでしょう。
ところで、「Web からも使える」ってどんなイメージですか?Web サービスなのか、ASP.NET で作った Web サイトから参照するだけでしょうか。DLLで作るのかと思いましたが、C#で使用のDLLの説明(Webで検索した限り)には、何か歯切れの悪い感じがしています。
「歯切れが悪い」という表現が気になりますが、どういった記載でしたか?
差し支えなければ参照したページと、そこから抱いた印象などを記載いただければ、説明する・してもらえるかもしれません。なるべく簡単にしたいのですが、どういう実装方法が良いのでしょうか?
呼び出し側も、呼ばれる側も C#で作りたいと考えています。クラスライブラリプロジェクトを作って、public としてクラスを公開していれば、アプリケーション側はその DLL を参照するように設定を追加するだけになります。
ただ、開発の進め方によっては、古い DLL を参照していたなどのトラブルがあるかもしれませんが、そのあたりは開発の体制などによって異なるのであらかじめ伝えておくのは難しいと思っています。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2011年7月4日 8:12
-
久しぶり(3年ぶりぐらいかな)にフォーラムに来たら、インタフェースが全然変わっていて、何をどうすれば良いのか全く分かりません。過去ログとかそんな概念も今は無いのでしょうか?
MSDNフォーラムは何度かリニューアルしていますが、過去ログは残っていて検索できるはずです。ただ、GDNJは残念ながら未だに見れないようです。
(参照)
GDNJ アーカイブが消えた?
http://social.msdn.microsoft.com/Forums/ja-JP/suggestja/thread/4250716e-c9ad-4634-81b9-48bea1c2181dDLLで作るのかと思いましたが、C#で使用のDLLの説明(Webで検索した限り)には、何か歯切れの悪い感じがしています。
なるべく簡単にしたいのですが、どういう実装方法が良いのでしょうか?
呼び出し側も、呼ばれる側も C#で作りたいと考えています。
サブルーチンというかそういうメソッドを集めたプロジェクトを作成し、そのプロジェクトのプロパティでアプリケーションタブの出力の種類をクラスライブラリにして、dllにしてしまえば良いと思いますよ。参考までに、そういうメソッドを作成する上で、以下の本に書かれている内容が参考になると思います。.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン
http://www.amazon.co.jp/dp/4891006765/
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月4日 8:12
-
そのメインルーチンをRelease 構成でビルドして、Release フォルダーにできる実行ファイルを
相手に渡したとき、相手はデバッグモードで、彼自身のDLLプログラムをデバッグ出来るということと捉えてよろしいですか?可能です。
# ”開示したくない”のレベルがどの程度か存じませんが、逆コンパイラを導入すればある程度読めることが容認できるならという前提ですが。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク akamata 2011年8月7日 13:41
すべての返信
-
久しぶり(3年ぶりぐらいかな)にフォーラムに来たら、インタフェースが全然変わっていて、何をどうすれば良いのか全く分かりません。過去ログとかそんな概念も今は無いのでしょうか?
”保存されているだけで書き込めない過去ログ”という考えはありませんが、今までの書き込みはある程度保持されています。(MSDN フォーラム設立以降のもの)
MSDN フォーラム全体で検索などのテキストボックスから探したり、Google などの検索エンジンで探したりすることになりますね。あるサブルーチンの処理を、外部に出して、色々の人にその作成をまかせたいと思っています。
そして、必要に応じてそのルーチンを指定して呼び出したいというのが希望です。
また、そのルーチンはwebからも使えるようにしたいという欲望も持っています。切り出して別のクラスライブラリにして作ってもらうことはありでしょう。
ところで、「Web からも使える」ってどんなイメージですか?Web サービスなのか、ASP.NET で作った Web サイトから参照するだけでしょうか。DLLで作るのかと思いましたが、C#で使用のDLLの説明(Webで検索した限り)には、何か歯切れの悪い感じがしています。
「歯切れが悪い」という表現が気になりますが、どういった記載でしたか?
差し支えなければ参照したページと、そこから抱いた印象などを記載いただければ、説明する・してもらえるかもしれません。なるべく簡単にしたいのですが、どういう実装方法が良いのでしょうか?
呼び出し側も、呼ばれる側も C#で作りたいと考えています。クラスライブラリプロジェクトを作って、public としてクラスを公開していれば、アプリケーション側はその DLL を参照するように設定を追加するだけになります。
ただ、開発の進め方によっては、古い DLL を参照していたなどのトラブルがあるかもしれませんが、そのあたりは開発の体制などによって異なるのであらかじめ伝えておくのは難しいと思っています。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク 山本春海 2011年7月4日 8:12
-
久しぶり(3年ぶりぐらいかな)にフォーラムに来たら、インタフェースが全然変わっていて、何をどうすれば良いのか全く分かりません。過去ログとかそんな概念も今は無いのでしょうか?
MSDNフォーラムは何度かリニューアルしていますが、過去ログは残っていて検索できるはずです。ただ、GDNJは残念ながら未だに見れないようです。
(参照)
GDNJ アーカイブが消えた?
http://social.msdn.microsoft.com/Forums/ja-JP/suggestja/thread/4250716e-c9ad-4634-81b9-48bea1c2181dDLLで作るのかと思いましたが、C#で使用のDLLの説明(Webで検索した限り)には、何か歯切れの悪い感じがしています。
なるべく簡単にしたいのですが、どういう実装方法が良いのでしょうか?
呼び出し側も、呼ばれる側も C#で作りたいと考えています。
サブルーチンというかそういうメソッドを集めたプロジェクトを作成し、そのプロジェクトのプロパティでアプリケーションタブの出力の種類をクラスライブラリにして、dllにしてしまえば良いと思いますよ。参考までに、そういうメソッドを作成する上で、以下の本に書かれている内容が参考になると思います。.NETのクラスライブラリ設計 開発チーム直伝の設計原則、コーディング標準、パターン
http://www.amazon.co.jp/dp/4891006765/
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク 山本春海 2011年7月4日 8:12
-
ご返事ありがとうございます。
>クラスライブラリプロジェクトを作って、public としてクラスを公開していれば、アプリケーション側は
>その DLL を参照するように設定を追加するだけになります。
上のような回答が欲しかったのです。試してみます、初心者ですみません。
『歯切れが悪い』と書いたのは『自分の目的に合うのか良く分からなかった』という言葉の、言い間違いということにしてください。
>「Web からも使える」ってどんなイメージですか?Web サービスなのか、ASP.NET で作った Web サイトから参照するだけでしょうか。
上の意味は、自分でもまだイメージがはっきりしないのですが、webに翻訳ボタンを付けるようなイメージです。
まだ先の課題ですので、とりあえずは、上の課題から先に解決することにします。
-
こんにちは、AKAMATA さん。
MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。
参考になるアドバイスをいただいているようでしたので、勝手ながら私のほうで回答としてマークさせていただきました。
Azulean さん、trapemiya さん、情報ありがとうございました。
いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
今後、同じ問題でこのスレッドを参照される方にも、有効な情報がわかりやすくなるかと思いますので、ご協力よろしくお願いいたしますね。
今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海 -
ところで、外部に出したサブルーチンをよその人にデバッグしてもらうとき、
自分の作ったメインルーチンのソースコードは開示したくありません。.NET Framework におけるマネージコードでコンパイルした場合、IL と呼ばれる中間言語になります。
実行時に JIT(Just In Time) コンパイルされてネイティブコードになります。IL から C# のコードを復元すると言った機能を提供するソフトウェアはいくつかありますので、DLL 形式で渡してもソースコードがある程度復元可能だと思ってください。
(機密を保持したいという意味では、DLL だけ渡しても保護になっていません。これはネイティブコードでも力をかければ同じことですが、IL は相対的にみて、逆コンパイルが楽に実現できるといえるでしょう)そうしたときは、DEBUGというフォルダに出来た実行ファイルを相手に渡せば、その人はその人自身の作ったサブルーチンをデバッグできるのですか?
Debug フォルダーはあくまで作ったもののデバッグに使うためのビルドです。
他者に渡す場合は、Release 構成でビルドして、Release フォルダーにできる DLL を渡してください。ただし、先述したように、逆コンパイラにかければ、ある程度ソースコードがわかります。
完全に元に戻るわけではありませんが、アルゴリズムを読み解ける程度にはなるでしょう。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。 -
Azulean様
回答ありがとうございます。
すいません、質問の意味について誤解があるようでした。言葉が足らなかったようなので
内容を詳細に説明します。
外部サブルーチン(DLL)は相手に作ってもらいます(ですので、ソースコードは渡します)
開示したくないソースは、そのDLLを呼び出すメインルーチンです。
Azuleanさんの先の回答を拡大解釈したとき、
そのメインルーチンをRelease 構成でビルドして、Release フォルダーにできる実行ファイルを
相手に渡したとき、相手はデバッグモードで、彼自身のDLLプログラムをデバッグ
出来るということと捉えてよろしいですか?
-
そのメインルーチンをRelease 構成でビルドして、Release フォルダーにできる実行ファイルを
相手に渡したとき、相手はデバッグモードで、彼自身のDLLプログラムをデバッグ出来るということと捉えてよろしいですか?可能です。
# ”開示したくない”のレベルがどの程度か存じませんが、逆コンパイラを導入すればある程度読めることが容認できるならという前提ですが。
質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。- 回答としてマーク akamata 2011年8月7日 13:41