[C#] DLLの統合について

このQ&Aのポイント
  • C#で開発中のDLLに他社製のDLLを統合したいです。
  • C#ではスタティックリンクはできないため、他の方法を探しています。
  • 現在の環境はVisual Studio 2012と.NET Framework 4.5です。
回答を見る
  • ベストアンサー

[C#] 複数のDLLを一つに統合したいです。

現在C#でDLLを開発しています。 その中で他社から購入したDLLを使用しているのですが、 それをユーザーに見せないようにしたいと言われました。 そのため、開発中のDLLに購入したDLLをどうにかして取り込みたいと 考えているのですが(スタティックリンクのような?)可能なのでしょうか? C#はそもそもスタティックリンクできないことは調べてわかりました。 また、ILMergeというものもありますが、実行ファイルに対してDLL取り込みを 行うようでDLLに対して行えないように見受けられます。 (試しに実行してみたところファイル生成まではされましたが  起動時に落ちてしまいました…) 環境は、 visual studio 2012 .NET Framework 4.5 です。 皆様、よろしければ知恵をお貸しください。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8521/19370)
回答No.3

追記。 ILMergeは.NETで作られたアセンブリ(DLL)だけが結合可能(C#で作ったDLLや、他社から購入したDLLは結合できない可能性が非常に高い)です。 >その中で他社から購入したDLLを使用しているのですが、 >それをユーザーに見せないようにしたいと言われました。 根本的な方針転換をして「インストールフォルダにDLLファイルは存在しているけど、ユーザーからは見えない」と言う方式に転換してみてはどうでしょう? ファイルを隠す方法は、色々あります(悪用の可能性があるので、ここでは方法は説明できませんが)

okwaveid_1
質問者

お礼

追記ありがとうございます。 返信が遅くなり申し訳ございません。 > 根本的な方針転換をして「インストールフォルダにDLLファイルは存在しているけど、ユーザーからは見えない」と言う方式に転換してみてはどうでしょう? それは盲点でした! 確かに"見えないようにしたい"という要望に応えられます。 この頂いた案も含めて今一度相談してみたいと思います。 > ファイルを隠す方法は、色々あります(悪用の可能性があるので、ここでは方法は説明できませんが) 是非お聞きしたいところですが、悪用の可能性が有るならば仕方がないですね… これだっ!!というものを見つけられるか分かりませんが、調べてみます。

okwaveid_1
質問者

補足

遅くなって申し訳ございませんが、 "違う視点"を教示下さったchie65535さんをベストアンサーに させていただきます。

その他の回答 (2)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

あれ、ILMergeにDLLをまとめる機能ってあったはず。 なんだけど、やっぱり基本的に多分EXEと付随DLLをまとめるプログラムなのでEXE一つにする方向で上に打診してみると良いのではないでしょうか。 C:\> ilmerge.exe /v4 /out:after.exe before.exe aaa.dll bbb.dll ccc.dll ddd.dll という風にv4オプションをつけて実行しても起動時に落ちるのであれば.Net 4.5には対応していないという事なのかも。

okwaveid_1
質問者

お礼

ご回答ありがとうございます。 > やっぱり基本的に多分EXEと付随DLLをまとめるプログラムなのでEXE一つにする方向で上に打診してみると良いのではないでしょうか。 実は、EXEが.NETで作られておらず、EXE一つにするのも難しいです。 (その記述がありませんでした。申し訳ございません。) EXE(C++)内で開発中のDLL(C#)を実行し、その開発中のDLL(C#)内で購入したDLL(C#)を実行しているような形です。 一応、「C#はスタティックリンクできないので購入したDLLを開発中のDLLに含めてしまうことはできない。EXEでもないのでILMergeも不可。EXEがC++で作られているのでEXE一つにまとめるのも難しい。」とお伝えした所、"DLLだけで何とかして一つにまとめたいのだが、どんな手段でも本当に絶対ないのか"と問われて再調査しているところでして… 購入したDLLのソースコードも購入先から頂いたので、自分のプロジェクトに追加してしまえば簡単な話なのですが、単純にプロジェクトに追加するだけでは大量のエラーが発生して途方にくれている状態です。(購入先もそういった顧客は今までいなかったので上手く行くかはわからないといっています。)

  • chie65535
  • ベストアンサー率43% (8521/19370)
回答No.1

>また、ILMergeというものもありますが、実行ファイルに対してDLL取り込みを >行うようでDLLに対して行えないように見受けられます。 ILMergeは「DLLを要求するexe本体に、要求されるDLLをマージする物」です。DLLにDLLはマージ出来ません。 なので「出来上がるexeに、開発中のDLLと、購入したDLLの両方をマージ」するのは可能です。 > (試しに実行してみたところファイル生成まではされましたが > 起動時に落ちてしまいました…) exeにマージしたDLLは「LoadLibrary(Ex)関数で明示的にロード」しないと動きません。

okwaveid_1
質問者

お礼

ご回答ありがとうございます。 > ILMergeは「DLLを要求するexe本体に、要求されるDLLをマージする物」です。DLLにDLLはマージ出来ません。 やはりそうですよね…実はできてしまう方法があったり、なんて幻想を抱いてしまいました。 試しにやってみたのはDLL同士のマージでして、ILMergeでファイル出力されたのでもしかしてと思ってしまいました。 ILMergeのできる範囲がよくわかりました、ありがとうございます。 > exeにマージしたDLLは「LoadLibrary(Ex)関数で明示的にロード」しないと動きません。 やっているはずだとは思いますが、確認してみます。 現在の事情は、anmochiさんのお礼コメントに記述した通りになります。

関連するQ&A

  • C++のDLLが見つからないVBAから見つからない

    こんにちは。質問させてください。 Visual C++ 2008 Express Editionで自作DLLを作成しました。 このDLLが、開発環境(WindowsXP、Excel2002)の Excelマクロで呼び出したところ、うまく動いたのですが、 WindowsVista、Excel2007のPCで同じマクロを実行すると 実行時エラー '53' ファイルが見つかりません [ファイル名] というエラーが出て実行できません。 どちらの環境でもDLLファイルはフルパスで指定していて ファイルはちゃんと存在しています。 原因が、Vistaなのか、Excel2007なのか またはその他の要因なのか、わからずに悩んでいます。 どなたか心当たりがある方がいらっしゃいましたらご教授願います。 よろしくお願いします。 その他詳細 ・DLLはdefファイルを使ってEXPORTしました。 ・Vistaのユーザーアカウント制限をoffにしてます。 ・Declear部分のソースコードは Declare Sub Prepare Lib "C:\test\API_test.dll" (ByVal FileName As String)です。

  • VS2010でC#のDLLを作成する手順

    Visual Studio 2010でVisual C#のコードのDLLを作成したいのですが 簡単なコード例で具体的な操作手順を教えていただけないでしょうか。 (Microsoft Visual Studio 2010、OS WindowXP) Visual C++でDLLを作成する手順については 「チュートリアル: ダイナミック リンク ライブラリの作成と使用 (C++)Visual Studio 2010 」 <http://msdn.microsoft.com/ja-jp/library/ms235636(v=vs.100).aspx> に詳しく手順が記載されていましたが、このVisual C#版が見たいのですが見当たりませんでした。 よろしくお願いします。

  • C++.NETで作ったDLLをVB6で使用するには

    Visual Studio .NET のC++で作られたDLLをVisual  Basic 6.0 で使用することはできますか。    

  • DLLって

    C言語を勉強しているのですが、いまいちよくDLLの意味がわかりません。例えば、シューティングのゲームで、当たり判定の処理をDLL形式?で保存して、違うシューティングを開発するときにそのDLLの関数を使って当たり判定を簡単にする。みたいな解釈でいいのでしょうか。また作成するときはどうやって作ればいいのでしょうか。ちなみにvisual studio 2008を持っています。ご教授お願いします。

  • dllの作成方法について

    現在 http://www.kumei.ne.jp/c_lang/sdk2/sdk_119.htm のサイトを参考に、 dllの作り方について勉強しています。 dll01.cpp, dll01.hまでを書いて、コンパイルしようとしたのですが、 c:\users\kei\documents\visual studio 2005\projects\dll01\dll01.h(5) : error C2059: 構文エラー : '文字列' c:\users\kei\documents\visual studio 2005\projects\dll01\dll01.cpp(11) : error C2059: 構文エラー : '文字列' とでてきてコンパイルできません。 解決方法が全く分からず困っています。 どなたかご教授願います。 <環境>   Windows Vista Home Premium Visual C++ 2005 Express Edition

  • C#で作成したDLLをDelphiで呼ぶ方法

    プログラミング初心者です。 以下の内容について、どなたか教えてください。 Visual studio 2010(C#のフォームアプリケーション)とCOM(ActiveX Tool bar)で作成されたフォームをDelphiで呼び出すことは可能でしょうか。 上記の内容を試験的に作成し(Visual studio 2010C#のフォームにCOMから参照したToolbarを貼り付けた物)、プロジェクトの出力方式をクラスライブラリに変更して、DLLの作成までは行えました。しかし、その先のDelphiからの呼び出し方がわかりません。 上記のDLLを用いてDelphiから呼び出す方法をご存知の方がいれば、教えてください。 なお現在の開発環境は以下の通りです。 Visual Studio 2010(C#) Delphi XE2(Trial) ご教授のほど、よろしくお願い致します。

  • C#の開発ツール「.NETFrameworkSDK」の操作法について

    C#言語初心者です。C#を勉強しようと思い開発ツールのダウンロードから始めました。 開発ツールとしてマイクロソフトが提供している「.NETFrameworkSDK」をダウンロードするために以下のWebページを開き、ダウンロードを試み、インストールまで実行しました。しかし、実行ファイルらしきものができておらず、C#をどのように開始してよいのかが判りません。 ダウンロード後に、ProgramFileに「Microsoft Visual Studio 8」というフォルダーができて、それを開くと9個のフォルダーがありました。 「Microsoft .NET Framework 2.0 SDK - JPN」 「Microsoft Visual C++ 2005 Express Edition - JPN」 「MSDN Express Library」 「Common7」  「1041」 「SDK」 「VC」 「VJ#」 「Xml」 の9個です。しかし、C#という文字が含まれるフォルダーは見当たりません。C#の開発ツールをダウンロードした筈なのに、それに関するファイルが1個もないというのはどういうことなのでしょうか。ヘルプファイルやReadMeファイルを参照したのですが私の理解力を超えていました。 「Visual Studio」を有料で購入すれば良いのでしょうが、無料ダウンロードで済ませられるのならそれに超したことはないと思い挑戦しました。どなたか、無料ダウンロードでC#コンパイラーを起動させる手順をご存知の方がおられましたら、ご教授頂きたいと思います。よろしくお願い致します。

  • VB 2008 DLL作成の方法

    当方Visual Studio 2008のVB、C++で開発をしています。 VS2008のVBでクラスライブラリとして作成し、ビルドをしてDLLを作成したのですが、 対となるLIBファイルがどこにも見当たりませんでした。 VS6.0のVBではLIBファイルも作成されました。 VS2008のVBでLIBファイルを作成する方法をご存知の方いらっしゃいましたら教えてください。 LIBファイルを使用する理由は、VBで作成したDLLをC++に組み込むときにリンクさせる為です。 ※今回はLoadLibrary関数を使わず、LIBファイルを使おうと考えています 以上、宜しくお願い致します。

  • インポート関数をインポートしないで(ry

    Visual StudioでwindowsのプログラムをC/C++作っています。 ダイナミックリンクライブラリにある関数を使うとき、その使う関数を実行ファイルに直接埋め込んでインポートしないで使うことは可能でしょうか?自分の作ったライブラリの関数ではなく用意されたものの場合です。例えばuser32.dllにある関数を使う場合などです。 回答よろしくお願いします。

  • C++/CLIで作ったDLLが読み込めない。

    現在、Visual Studio 2010を使い、 C++/CLIで作ったDLLを、C#から呼び出すプログラムを作成しております。 Visual Studioのデバッグでは、正常に動作するのですが、 IISに設定してブラウザから確認しようとすると、 「ファイルまたはアセンブリ 'wrap.dll'、またはその依存関係の 1 つが読み込めませんでした。指定されたモジュールが見つかりません。」 というエラーが出てしまいました。 下記のサイトなどを参考に、 「ソリューションを1つにして参照設定する」、 「Releaseモードにする」などと実施してみましたが、 解決するには至っておりません。 http://social.msdn.microsoft.com/Forums/ja-JP/vcgeneralja/thread/23fd794a-7d8a-4153-9e1e-0358c38a84eb この原因と対処法に関して、ご助言頂きたいと思います。 宜しくお願いします。

専門家に質問してみよう