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

このQ&Aのポイント
  • Visual Studio C++ 2008で自作DLLを使用したプログラムを作成しています。
  • プログラムを実行すると「myutil_d.dllが見つからなかったため、このアプリケーションを開始できませんでした。」というエラーメッセージが表示されます。
  • 解決方法として、myutil_d.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ファイルを管理したいと考えています。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

PATH を適切に設定すればいいのかもしれない.

参考URL:
http://msdn.microsoft.com/ja-jp/library/7d83bc18%28v=vs.80%29.aspx
maruyl
質問者

お礼

PATHを設定したらきちんと認識するようになりました。大変助かりました。ありがとうございました。

関連する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 と同じホルダーに作ることが出来れば操作ミスは無くなります 何らかの方法があると思い色々調べましたが分かりません もしご指導頂ければ幸いです

  • 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日も悪戦苦闘しましたがギブアップ状態です ぜひご指導願います

  • Visual C++ 2005で作ったツールの実行方法

    大変初歩的な質問で本当に申し訳ないのですが、Visual C++ 2005で作ったらしきツールの実行方法がわかりません。ネットで検索しても、あまりに初歩的過ぎるのか、そのものずばりは見つけられませんでした。 (昔少しだけ使った、VC++ 6.0では、*.exeというわかりやすいものがあったように思うのですが…) ツールの名前をAAAとしますと、ディレクトリの中は、以下のようなものがあります。 Debug(ディレクトリ) ReadMe.txt AAA.cpp AAA.ncb AAA.sln AAA.vcproj (その他の名前の*.cppと*.h) UpgradeLog.XML そして、Debugの下は、以下のようなものがあります。 BuildLog.htm AAA.exe.embed.manifest AAA.pch (その他の名前の*.obj) vc80.idb vc80.pdb ためしにAAA.pchをダブルクリックしますと、メモ帳が開いてしまい、バイナリが見えるだけです。また、ReadMe.txtは、「コンソール アプリケーション : AAA プロジェクトの概要」から始まる自動作成されるドキュメントで、肝心の実行ファイルのことは書かれていませんでした。 非常にお恥ずかしい限りなのですが、質問できる人も今はおらず、お願い致します。

  • Hello,World が出力できません。 visual C++でのC言語で

    #include<stdio.h> void main() { printf("Hello,World!"); } と入力しているのですが, LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 D:\ゲーム作り\プログラム\Hello\Debug\Hello.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。 Hello - エラー 2、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== とこんな感じでできません・・ stdioファイルはおれないのでこのファイルがあるHelloってファイルにかえたところ, #include<Hello.h> void main() { printf("Hello,World!"); } 結果 d:\ゲーム作り\プログラム\hello\hello.cpp(1) : fatal error C1083: include ファイルを開けません。'Hello.h': No such file or directory ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。 Hello - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== けっきょくはできないんですが,エラー1つ減ってるんで・・ http://homepage2.nifty.com/natupaji/DxLib/dxuse_vc2008express.html こちらを参考に設定を変更してから本のプログラムをくんでいるので,若干めちゃめちゃになってるかもしれません・・・ ちなみにstdio,Helloと変更したとこをDxLibにしてもstdioのときと変わりません。あとincludのとこに何も打たないでやると void main() { printf("Hello,World!"); } 結果 d:\ゲーム作り\プログラム\hello\hello.cpp(3) : error C3861: 'printf': 識別子が見つかりませんでした ビルドログは "file://d:\ゲーム作り\プログラム\Hello\Debug\BuildLog.htm" に保存されました。 Hello - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== 今度は識別子です・・ できれば本に書いてあるとおりstdioでいきたいのですが,どうしたらいいでしょうか・・ お願いします・・・ 何もすることがないのでできれば早めに教えていただきたいのですが・・

  • C言語をコンパイル後の膨大なファイルについて

    先日このサイトで、古いC言語のソースを現在に生き返らせる ことについて皆さんからいろいろと教えていただきました. 本当に有難うございました. お礼を申し上げます. お蔭様で、昔々の printf 時代のソースが、C++でコンパイル出来ました. 上位互換の意味がよくわかりました. 具体的な、コンパイルの手法については、「猫でもわかる・・・」の説明にに従いました. ところが、コンパイルの結果について、また頭をひねっています. ファイルの格納先としては、H:\C_PlusPlus\Source を指定し、 ファイル名は Ex_001.c としました. 私としては、コンパイルすれば、objとexeのファイルくらいが 追加されるだろうと、軽く考えていました. ところが膨大な数のファイルが出来上がりました. まず、H:\C_PlusPlus\Source に、Ex_01と言うフォルダが出来ました. その中に、debug と,Ex_001と言う二つのフォルダ、 Ex_001.ncb, Ex_001.sln, Ex_001.suo と言う三つのファイルが 出来ました. debugフォルダの中身は、Ex_001.exe, Ex_001.ilk, Ex_001.pdb の 三つのファイルです. Ex_001フォルダの中身は、debug と言うフォルダと、Ex_001.proj, Ex_001.projNEC・・・, Ex_001.c の三つのファイルです. さらに、debugフォルダには、次の8ケのファイルが入っています. BuildLog.htm, Ex\1.exe.embedded.manifest, Ex\1.exe.embedded.manifest.res, Ex_001.intermediate.manifest, mt.dep, Prog_001.obj, vc80.idb. vc80.pdb この莫大な数のファイルがいったい何であるのか、見当もつきません. 5,6冊ほど、C++の本を買って来ましたが、どういうわけか、どの本も、ビルドして、デバッグせよと言うだけで、それから先の説明が見つかりません. お手数かけて恐縮ですが、どなたかそのあたりについてご教示をお願いします. または、この辺について記述されている書籍をご紹介ください. よろしく、お願いします. 追伸 ずっと昔、コンパイルしてリンクしていたころのことを思い出して、 ソースとexeファイル以外は全部消して見ました. それでも結構、exeファイルは動きます. 問題ないようです. いったい、あの沢山のフォルダやファイルは、はたして、保管の必要があるのでしょうか? テストしたプログラムは、最簡単なものとして、次のとおりです #include "stdio.h" int main() { int num; printf (" My name is Bill \n"); scanf ("%d", &num); return 0; }

  • CのDLLをVC++でコンパイルしたいのですが、エラーになってしまいます。

    c言語の初心者なのですが、質問させて下さい。 javaからCのDLLを呼び出したく、 (下記のソースを書いたのですが、VC++でコンパイルすると LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/HelloWorld.exe : fatal error LNK1120: 外部参照 1 が未解決です。 と出てしまいます。 過去ログ等を見て、作成しているプロジェクトが悪いのかなと思い、 MFC appWizark(dll) win32 Application win32 Console Application win32 Dynamic-Link Library 等を作ってみてコンパイルしてみたのですが、駄目でした。 ちなみにDOSプロンプトで cl -IC:\j2sdk1.4.2_10\include\win32 -LD HelloWorl d.c -o HelloWorld.dll と実行するときちんとコンパイルできて、正常に実行も出来ました。 VC++でどうやればコンパイルできるのでしょうか? #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_printMessage (JNIEnv *env, jobject me) { printf("Helo World!!!\n"); return; }

  • VC++6.0 DLLの作り方

    VC++6.0でWin32 Dynamic-Link Libraryプロジェクトを作成しようとしました。 練習用に足し算と引き算です。 StdAfx.cpp test99.cpp StdAfx.h ReadMe.txt Basetsd.hなど、いろいろなファイルが出来ています。 これを親プログラムから、#include "StdAfx.h"としてリンクさせたいのですが、 StdAfx.hに、関数を公開しなければならないと思います。 StdAfx.hは、何を行うヘッダーファイルなのか? 何処に何を記述するのがベストでしょうか? VC++の生成した日本語のコメントの意味が今ひとつ理解できません。 以下はtest99.cpp #include "stdafx.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { return TRUE; } __declspec(dllexport) int WINAPI tasizan(int a,int b) {return (a+b);} __declspec(dllexport) int WINAPI hikizan(int a,int b) {return (a-b);} 以下はStdAfx.cpp #include "stdafx.h" 以下はStdAfx.h #if !defined(AFX_STDAFX_H__D849B748_701B_483D_9457_AA6096D78FB0__INCLUDED_) #define AFX_STDAFX_H__D849B748_701B_483D_9457_AA6096D78FB0__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #define WIN32_LEAN_AND_MEAN #include <windows.h> //????????__declspec(dllexport) int WINAPI tasizan(int,int); //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。 #endif // !defined(AFX_STDAFX_H__D849B748_701B_483D_9457_AA6096D78FB0__INCLUDED_)

  • VC2005のDLLを6.0で呼び出すには

    VC 2005 Pro Editionで作ったライブラリ(ヘッダ、lib、dll)を頂きました。    頂いたDLLの形式は定義ファイル.defを使わない形式、declspec(dllexport)を使う形式の方です。  呼び出し側はVC6.0EnterPrize(SDK)を使います。 (諸事情により6.0以上にUPすることは不可能)     まず、静的リンクをし、関数を呼び出してみました。  (設定のリンクよりlibをリンクさせ、ヘッダをインクルードして)  すると以下のメッセージが出てしまいます。 リンク中... Dialog1.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) void __cdecl Init(unsigned char *,unsigned char *,unsigned char *,unsigned char *)" (__imp_?Init_Card@@YAXPAE000@Z)" は未解決です Debug/CardMake.exe : fatal error LNK1120: 外部参照 1 が未解決です 。 link.exe の実行エラー    色々やってみましたが、このエラーから回避できませんでした。  ヘッダ自体に #ifdef _USRDLL #define DLL_PORT __declspec(dllexport) #else #define DLL_PORT __declspec(dllimport) #endif    の宣言があるので、別に特別なことをしなくても、大丈夫そうなのですが、何故か出来ません。  次に動的リンクを行っていました。  するとLoadLibraryでエラーになり、GetLastErrrorで14001(エラーメッセージはつかめず)が返ってきました。 (色々調べたところ定義ファイルがないと動的リンクはできないようですね)    というわけでにっちもさっちも行かなくなった状況です。  そこでご質問です。 (1)定義ファイルを使わない形式のライブラリ(暗示的に定義されているもの)はどのように呼び出させばよいでしょうか? (2)2005のライブラリを6.0から呼び出すことは可能ですか?  また呼び出す方法は?  すいませんがご回答をお願いします。

  • DLLからサードパーティDLLを使うには

    現在VisualC++2010においてレギュラーDLLを作成しています。そのDLL内でサードパーティライブラリを使いたいのですが、MFCプロジェクトなどと同様にインポートライブラリ設定やDLLの配置を行なってもうまくいきません。具体的には、作成したレギュラーDLLをインポートしたプログラム実行時にdllinit.cpp内でDebug Assertionが出ます。 VC++においてDLL内からDLLを使用するのは一工夫いるということまではわかっているのですが、なにかよい解決策をご存知の方がおられましたらご教授願えれば幸いです。

  • VC++アプリケーションフォームにDLLをリンク

    単純なC++などは適当に使えるのですが、マルチスレッドのプログラムについては初心者です。 VC++2010ExpressEditionのアプリケーションフォームを用いて ボタンを押すと、テキストに入力した数値をDLLの関数に送り、その計算結果を、ラベルに表示する、という単純なプログラムを作成しています。 DLLを利用しないで、Form1内に計算式を作った場合には、正常に動かすことができます。 しかし、DLLの関数を利用する方法がわかりません。 DLLを呼び出すようにプログラムを書いても、ビルドするとエラーが出ます。 インターネット上を30時間位いろいろ調べて試したのですが、分かりませんでした。 もう限界になりましたので、ここに投稿しました。 解決方法を教えて頂けますよう、お願い致します。 DLLは下記のような単純なもので、Sample.cppとSample.defで構成されています。 //+--- Sample.cpp ---+ #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers #include <windows.h> #include <stdlib.h> #include <stdio.h> //---- #define ABC_EXPFUNC __declspec(dllexport) //+------------------------------------------------------------------+ BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { //---- switch(ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } //---- return(TRUE); } //+------------------------------------------------------------------+ ABC_EXPFUNC double __stdcall SecretFunc(double a, double b) { double c = a + b; return(c); } //+--- Sample.def ---+ LIBRARY Sample EXPORTS SecretFunc

専門家に質問してみよう