DLLを出力する位置の指定方法は?

このQ&Aのポイント
  • ソフトウェア開発において、DLLを出力する位置を指定する方法についてお知らせください。
  • Visual Studio 2010を使用して、MySystemというシステムを開発しています。メインプログラムはC#で、DLLはC++で開発しています。DLLの出力をメインプログラムと同じ位置にする方法を教えてください。
  • DLLのプロパティやリンカーの設定を変更しても、DLLがメインプログラムと別の場所に出力されてしまいます。DLLの出力位置をメインプログラムと同じ場所にする方法を教えてください。
回答を見る
  • ベストアンサー

DLLを出力する位置の指定方法は?

Visual Studio 2010 を使用して簡単なシステムを作っております ソリューションはMySystemと名付けました メインプログラムはC#で開発しており、MySystem_MAINといいます そのほかにDLLもありC++で開発しており、MySystem_DLLといいます MAINは『暗黙の指定』でDLLを呼びます 従ってDLLの出力はMAINと同じ位置にしようと思い、次のように指定しました (1) DLLのプロパティ ⇒ 構成プロパティ ⇒ 全般 ⇒ 出力ディレクトリに以下のように指定しました G:\Projects\MySystem\MySystem_MAIN\bin\Debug\ (2) DLLのプロパティ ⇒ 構成プロパティ ⇒ リンカー ⇒ 出力ファイルに以下のように指定しました G:\Projects\MySystem\MySystem_MAIN\bin\Debug そこでソリューションのリビルトを実行すると以下のWarningが出ます TargetPath(G:\Projects\MySystem\MySystem_MAIN\bin\Debug\MySystem_DLL.dll) が Linker の OutputFile プロパティ値 (G:\Projects\MySystem\MySystem_MAIN\bin\Debug) と一致しません。このため、プロジェクトが正常にビルドされない可能性があります。この問題を解決するには、$(OutDir)、$(TargetName)、および $(TargetExt) の各プロパティ値が、%(Link.OutputFile) で指定されている値と一致することを確認してください。 そして結局リビルトは失敗に終わります DLLはMAINのところには出来ず、G:\Projects\MySystem\MySystem_DLL\bin\Debugのところに出来ています 失敗の原因はここにあると思います どのようにすればMAINと同じ位置にDLLを出力できるでしょうか? 色々調べましたが分かりません、是非ご指導願います

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

  • ベストアンサー
回答No.1

URL参照。

参考URL:
http://d.hatena.ne.jp/erio_nk/20110519/1305819066
sato-may
質問者

お礼

ありがとうございます お陰様で意図した通りに変更出来ました ありがとうございました

関連するQ&A

  • .dll .lib を作成するホルダーの指定法は?

    .NETで同一ソリューションの中に、C#でメインプログラム、C++でDLLプログラムを作りました メインの .exeは Projects ⇒ MySolution ⇒ MyMainProject ⇒ bin ⇒ Debug ⇒ Main.exe のように出来ます 一方DLLは Projects ⇒ MyDLLProject ⇒ MyDLL.cppとなり、 これをビルドすると .dll .lib が MyDLLProject と同レベル位置にあるDebugホルダーの中に出来上がります メインはDLLを『暗黙の呼出し指定』で呼んでおりますので、Main.exeと同じホルダー入れたいのです 現在は毎回 .dll .lib をコピーした後に、改めてMain.exeを実行していますが、操作が煩雑でミスが多発して困っております もしDLLの.dll .lib をビルドの段階で Main.exe と同じホルダーに作ることが出来れば操作ミスは無くなります 何らかの方法があると思い色々調べましたが分かりません もしご指導頂ければ幸いです

  • VC++でDLLを作っていますがぁ~???

    1ソリューション1プロジェクト主義です ⇒ 実はゴチャゴチャになってしまうのが怖いだけです ですからDLLを作る際にもDLL自体とDLL呼出し元を別のソリューションで作り、呼出し元のリンカーの入力の『追加の依存ファイル』でDLL.libを指定しています そうするとリビルドで『DLL.dllが無いぞ!』とのエラーが出ます 仕方がないのでDLLソリューションから呼出し元EXEのディレクトリィにDLL.dllをコピーするとOKになります 質問 DLLソリューションからDLL.dllをコピーしなくとも良い方法はありますか? 出来ましたら以下の愚問にもお答え頂ければ幸いです 愚問(1) DLL.dllとは何者ですか? 私にはDLL.libが必要なのですがぁ~ 愚問(2) DLLを作成する事例の各種のサンプルでは同じソリューションにDLLと呼出し元を入れて、出来上がったDLL.libのパスを呼出し元プログラムのプロジェクトの追加の依存ファイルに書込んでいます サンプルのように同じソリューションに入れるメリットは何ですか? 愚問(3) DLLの文字セットには『設定なし』を指定しています。呼出し元の文字セットはマルチバイトです。なぜ整合性が取れるのでしょうか? 宜しくお願い申し上げます

  • DLL.libが開けません!

    .Net C++ でMAINとそのMAINが使用するDLLを作りました MAINの中で #pragma Commennt (lib,'DLL.lib') を指定してあります リソリューションホルダー直下のDebugホルダーにはDLLのdll、exp、ilk、lib、pbdが出来ています にも拘らずリビルトすると LINK : fetal error LINK 1104 'DLL.lib'を開くことができません とのエラーが出てしまいます アチコチ修正したり、ネットで調べましたが解決出来ません 3日も悪戦苦闘しましたがギブアップ状態です ぜひご指導願います

  • ビルド後DLLのコピーをバッチで行いたい。

    VB2005環境です。 ソリューションのビルドを行うと、複数のDLLがDebugフォルダに 出力されるのですが、環境的に、それを別のディレクトリにそのまま コピーする必要があります。 この、ビルド→DLL出力→別のディレクトリへコピー、という 一連の作業をバッチファイルにして行いたいのですが、バッチの ビルドまでは msbuild フォルダパス\ソリューション でいけるのですが、この後の、出力されたもののコピーをやらせるには どうしたら良いか教えていただけないでしょうか? 最初からDLLの出力先を別ディレクトリに指定しておけばコピーする 手間は省けますが、事情によりそれは不可、ということでお願いします。

  • DLLと呼出しプログラムを同時にインストールする?

    DLLとそのDLLを呼ぶCallDLLという親プログラムを作りました なおDLLとCallDLLは別ソリューションにありますので、Dll.dllをCallDLL.exeがあるディレクトリにコピーしてデバックしました(明示的リンクですのでDLL.libはありません) デバック完了したのでReleaseでリビルドしたCallDLL.exeを作り、同じくReleaseでリビルドしたDLL.dllを同じ所にコピーしました すなわちc:\ユーザ\~~\Projects¥CallDLL¥Releaseに DLL.dll、 CallDLL.exe、 CallDLL.pdb(これ何だか分かりません?)が入りました この状態でセットアッププロジェクトを作り、リビルドしたらSetup.exeとCallDLL.msiが出来ました このSetup.exeを起動してインストールするとProgramFilesにはCallDLL.exeしか入っていません DLL.dllがインストールされていないのです どのようにしたらDLL.dllを含めて一度にインストール出来るようになりますか? 色々と検索したりマニアルを読みましたが分かりません 教えてください、お願いします

  • [VC++2008].dllが見つからない

    Visual Studio C++ 2008で自作DLLを使用したプログラムを作成しています。 ソースツリーが以下のようにあります。 main.cpp で #pragma comment(lib,"myutil_d.lib") #include "myutil.h" とすると、コンパイルは成功するのですが、prog1.exeを実行すると: 「myutil_d.dllが見つからなかったため、このアプリケーションを開始できませんでした。」 と出てきてプログラムが始まりません。 これを解決する方法をご教授いただけるでしょうか? (MYPROGROOT) |-include | |-myutil.h | |-lib | |-myutil_d.dll | |-myutil_d.exp | |-myutil_d.lib | |-prog1 | |-Debug | | |-prog1.exe | | |-prog1.ilk | | |-prog1.pdb | |-prog1 | | |-Debug | | | |-BuildLog.htm | | | | ... | | | | | | |-main.cpp | | |-prog1.vcproj | | | |-prog1.ncb | |-prog1.sln | |-prog1.suo | |-prog2 |-Debug | |-prog2.exe | |-prog2.ilk | |-prog2.pdb |-prog2 | |-Debug | | |-BuildLog.htm | | | ... | | | | |-main.cpp | |-prog2.vcproj | |-prog2.ncb |-prog2.sln |-prog2.suo 「>ツール>オプション>プロジェクトおよびソリューション」下 インクルード ファイル :$(MYPROGROOT)\bin ライブラリ ファイル :$(MYPROGROOT)\include もちろんmyutil_d.dllを(MYPROGROOT)\prog\Debug\ に配置するとプログラムは動くのですが、prog1, prog2, と多数のプログラムで myutil_d.dllを使用するため、バージョン管理のために統一のディレクトリで .dllファイルを管理したいと考えています。

  • visualstudioでc#のdllができない

    visualstudio2010を使用しています。 dllの作成をしたいのですが、なぜか作られません。 どこに手順を書きますのでどこに間違いがあるか教えてください。 (1)作成したプロジェクトを開く (2)ファイルー新しいプロジェクトを選択 (3)クラスライブラリを選択 (4)ソリューション(S):ソリューションに追加を選択ーOKボタン (5)DLLの中を書く (6)参照設定を選択する (7)ソリューションのプロパティのビルドでフォルダを指定する。 (8)ビルドする(もちろん通る) しかし、DLLはどこにも見当たらない。 検索しても、クラスライブラリを選択すれば自動的にできると書いてあるので、困り果てています 機能はMEFを使用し、僕ではない人が作ったDLLがすでに追加されており、僕もDLLを追加したいのですが、なぜかDLLが作成されません。 詳しいかたよろしくおねがいします。

  • C++/CLIのDLLをC#で使う

    C++/CLIのDLLをC#で使う ソリューションの中にC++/CLIでクラスを作成し、出力がDLLのプロジェクトと、 C#でGUI画面の処理のプロジェクトがあります。 このときC#側でC++/CLI側で作ったDLLを使用したいのですが、やり方がわかりません。 DLL自体はC#のDebugフォルダに入っており、参照設定で読み込んでいます。 ご教授のほど、よろしくお願いいたします。

  • Visual StudioのF5一発で、変更があるプロジェクトのみビルドしなおしで、実行までの自動化方法についての質問

    質問内容についてまず、結論を書きます。2つあります。 いづれか一方だけの回答でもわかるのであれば、お願いします。 Q1 同一ソリューションファイルに、複数のexeとdllが存在する時に、 「ソリューションのビルド」(リビルドではないです)を実行または、F5キーを押して、実行の行為を おこなった時に、ソースに変更があったプロジェクトのみビルドしなおされるようにする方法を教えてください。 Q2 また、dllの参照設定に指定するdllは2つあるうちのどちらを設定すればよいかを教えてください。そして、その理由もできれば、お願いします。 ↑「2つあるうちのどちらを」はおそらく意味不明だと思いますので、以下の説明のなかで言及します。 <<以後補足説明>> A.exe、B.dll、C.dll、D.dll、E.exe から構成されるアプリケーションを開発中です。 ソリューションファイルのパスは、 C:\hoge\A\A.sln です Aプロジェクトのプロジェクトファイルは C:\hoge\A\A.vbproj プロジェクトファイルについては、A~Eまで同様で、 Aフォルダと、プロジェクトファイル名が、各自のアルファベットにかわっただけです。 2箇所にdllが出力されます。 ア) C:\hoge\B\bin イ) C:\hoge\B\obj\Debug A~Eもアルファベットが異なる、exeとdllが異なる以外は同様です。 Q2の「2箇所」はこれのことです。 Q1ですが、Bプロジェクトのあるソースを修正してF5で実行しても、 B内での変更内容が実行に反映されなかった。 参照設定が原因か?と、(ア)→(イ)に変更しても、結果は同じ。 ソリューションのリビルドまたは、 Bプロジェクト単独でビルドした後にF5キーを押すと、反映されますが・・ そこで、Q1の質問ですが、F5キー一発で、ソリューションのなかで、変更があったソースのプロジェクトのみビルドして、 実行するまでを一発で、やる設定方法はないでしょうか?

  • VCで作成したDLLをBCBから呼び出す方法

    皆さん こんにちは。 VCで作成したCのAPIを実装したDLLをBCB6.0で作成したアプリケーションから呼び出そうとしています。 コンパイルは通るのですが、リンク時に以下のエラーメッセージが表示されてしまいます。   [リンカ エラー] 外部シンボル 'My Function' が未解決(C:\BCB\***.OBJ が参照) BCB6のフォームプロジェクトからDLLを利用するために、以下の手順を行いました。 (1)DLLをbcb用に変換する   implib -a aaa.lib aaa.dll (2)プロジェクトにaaa.libを追加 (3)aaa.dllをプロジェクトのフォルダに追加 (4)コードを以下のように実装しました    extern "C" __stdcall ulong SysInitialize(void);  //プロトタイプ宣言    ulong ulRetVal = SysInitialize(); //コード内での呼び出し この状態でコンパイルは通るのですがリンカでエラーが発生します      [リンカ エラー] 外部シンボル 'SysInitialize' が未解決(C:\BCB\TELIGEV\MAINDLG.OBJ が参照 他のサイトで調べたところ、C++特有の修飾子"@***"がついている場合に同じエラーが出るとのことだったので、dumpbin.exeを使ってDLL内の関数をダンプしたところ、関数名にはアンダースコアや@などは関数名についていないようです。 dumpbinの出力結果   1 1D 000065A0 SysInitialize このほか、自分なりに調べたところ、以下のサイトを見つけたのですが、英語力の弱さから解決策を見出すまでには至りませんでした。 Using Visual C++ DLLs with C++Builder http://bcbjournal.org/articles/vol4/0012/Using_Visual_C_DLLs_with_CBuilder.htm どなたか、ご助言いただけると助かります。 よろしくお願いします。

専門家に質問してみよう