NET2005でDllが読み込めない

このQ&Aのポイント
  • NET2005で作成したプロジェクトで自作のDLLを読み込む際にエラーが発生し、モジュールが見つからないエラーが出ます。
  • プロジェクトはC++で記述されており、OSはWindows XP SP3を使用しています。
  • 問題の解決方法として、最新バージョンのWindowsスクリプトホストを使用してコンピュータを更新する必要がありますが、詳細な手順が示されていません。リンク先も提供されていません。
回答を見る
  • ベストアンサー

NET2005でDllが読み込めない

  質問に追記をしたいので新設してもう一度質問をしました。 プラットフォームはVS.NET2005でC++で記述しています。 OSはWindows XP SP3です。 自分で作成したDLLを読み込むためにLoadLibrary関数でDLLを読み込んだハズなんですがエラーになり、エラー値126で、指定したモジュールがありません と出ます。 たしかに指定したフォルダにDLLがあるはずなんですが。 DLLの方は実は.NET2003で作られたDLLです。 しかし2003でも2005でも関係なくDLLは読み込まないようです。 ただ、.NET2003からコンバートしたソリューションだと正常にdllファイルを読み込んでいます。 NET2005で新規作成でプロジェクトを作り、そこの.cppファイルからdllファイルを読み込ませようとすると失敗します。 一つ気になるのが、Microsoftのホームページの以下のアドレスでその事に関する対策が載っているようです http://support.microsoft.com/kb/891401/ja この問題を解決するには、最新バージョンの Windows スクリプト ホストを使用してコンピュータを更新します。これを行うには、次のマイクロソフト Web サイトを参照してください。 解決方法としてこのように載っていますが、リンク先がありません。 何かしらどこかにリンク先がないでしょうか? もしくはこの問題を解決できる方法はありませんか? 質問でもなんでもいいので解答ください。 m( )m どうかよろしくお願いいたします。

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

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

コンバートしたプロジェクトでうまく読み込めるなら、そのプロジェクトで作成した実行ファイルとdllファイルを、開発環境が入っていないマシン(必要であればVirtualPCやVMWareなどで作成して)でちゃんと動作するか確認してみては? ランタイムや他のdllが必要であれば、それらをインストールやコピーしないと動作しなくなるので、必要なものが確認できます。 あと、コンバートしたプロジェクトと新規のプロジェクトの違いというと、UNICODEを使用するか否かという部分が大きいと思いますが、その辺は影響しませんか? UNICODEを使用するプロジェクトであれば、LoadLibraryに渡すファイル名もUNICODEにする必要があります。 もう1つ、チェックするとすれば、dllファイルの場所をフルパスで記述してみるとか。 以前、読み込むdllの場所によって、セキュリティの問題が発生したことがあって、何らかの対策が追加されているかもしれません。

dotneer
質問者

お礼

 解答ありがとうございます。 dllのフルパスを試してみます。

dotneer
質問者

補足

>LoadLibraryに渡すファイル名もUNICODEにする必要があります。 Unicode文字に対応するということでしょうか? プロジェクトのプロパティでUnicode文字からマルチバイト文字に変更して デバッグをやっています。 Unicode文字じゃないとエラーが多く出て実行できないんでマルチバイト文字セットを使用するにしました。 DLLでもそうです。

その他の回答 (2)

回答No.2

提示されたリンクの内容は、 「アプリケーションを作成しようとすると、アプリケーションが正常に作成されず、次のようなエラー メッセージが表示されることがあります。」 なので、VisualStudioが正常に動作しない場合の対処方法です。 今回の問題とは違う内容でしょう。 dllファイルの読み込みに失敗する場合、そのdllファイルだけでなく、dllファイルが読み込む別のdllファイルの存在の有無も影響します。 Depnedency Wakerなどで依存関係をチェックしてみてはいかがでしょうか。

dotneer
質問者

お礼

解答ありがとうございます。 dependswalkerで調べてみたところ、そのDLLにリンクしているDLLの一部がない(EFSADU.DLL WER.DLL IESHIMS.DLL)と言われますが.NET2003では動いてますよね^^; DLLリンクに問題ないDLLでもやはり読み込みません。 .NET2003のRuntime(CRT)が入っていないと指摘されたことがあるのですが そうなのでしょうか? NET2003のRuntime(CRT)というのは今は調べているところです。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

script 5.7で良いなら、マイクロソフトからダウンロード。 http://support.microsoft.com/kb/949140/ja ざっと追っかけた感じだと、regsvr32で済みそうな。

dotneer
質問者

お礼

マイクロソフトでダウンロードして試したら、もう必要ないというエラーがでました。 どうやらもうアップデートされているようです。 regsvr32でDLLをどのようにするのでしょうか? regsvr32はDLLをレジストリ登録して使用するとあるのですが。 自分が使っているDLLはレジストリ登録は必要ない状況です。 あと説明の追記をしておきます。 DLL関連の追記です。 DLLは MFC・ATCは使っていません。 .FrameWorkもです。 利用側のEXEも使用していません。

関連するQ&A

  • DLL関数を使ったプログラム

     DLL関数を使ったプログラムを動かしたんですが、ERRORが解決できず 困っています。DLLを作成したのはいいのですが、それをLoadLibraryで読み込もうとしても指定したプロシージャが見つからないというエラーになるようです。使用している環境はVisual Studio.NET2003です。  以下はDLLのソースです。 // plug.c // #include <windows.h> #include <stdio.h> __declspec(dllexport) void CALLBACK TestFunc() {    printf("DLLのTestFunc()関数が実行されました。\n"); } これをビルドするとplug.dllとplug.expとplug.libが作成されました。  そしてこれを使用したプログラムが // stab.c // #include <windows.h> #include <stdio.h> typedef void (*TestFunc)(void); void main() {     HMODULE hModule;     DWORD error;     TestFunc funcPointer;     hModule = LoadLibrary(TEXT("plug"));     error = GetLastError();//error値が127     funcPointer = (TestFunc)GetProcAddress(hModule,TEXT("TestFunc"));     funcPointer();     FreeLibrary(hModule);     getchar(); } LoadLibrary関数を使用してアプリのメモリ空間にDLLを読み込もうとしているんですが、ここでハンドルが正確に渡されていないみたいなんです。どうしてこうなるのか分かりません。わかる方いらっしゃったらよろしくお願いします。

  • DLLが LoadLibrary() でロードされたか判断できますか

    VC++6.0でDLLを作成しています。 アプリケーションが自分のDLLを LoadLibrary()でロードしたのか、 LIBリンクでロードしたのか、判断はできるでしょうか。 DLLの処理の中で、LoadLibrary()でロードされた場合と LIBリンクでロードされた場合の処理を分けたいのが目的です。 (LIBリンクの場合、デタッチ時にはメインのスレッドしか動作しないため) <補足> 正式にはどう呼ばれているか解らないのですが、「LIBリンク」は VCの設定でリンクするLIBを指定し、アプリケーションでは DLLが提供する関数名を記述する方法を意味します。

  • VC++6.0からVB.NETで作成した関数を呼ぶことができますか?

    VB.NET(Visual Basic 2005 Express Edition)でクラスライブラリ(AAA.dll)を作成し、BBBというModuleにCCCというFunctionをひとつ作成しました。 そのFunctionをVC++6.0で作成したプログラムから呼び出すことは可能でしょうか?また、可能な場合はどのような手順で呼び出すことができるのでしょうか? ■VB6.0でDLLを作成した場合 DLLのファイル名とFunction名さえ指定すればVC++6.0よりLoadLibrary、GetProcAddress関数を使用して呼び出せる。 ■VB.NETでDLLを作成した場合 DLLのファイル名+Module名+Function名という構成になってしまい、従来のLoadLibrary、GetProcAddress関数ではModule名が指定できないように思われるのですが・・・どうなんでしょう。 ご存知の方いらっしゃいましたらご教授お願いいたしますm(_ _)m

  • DLL呼び出しAPのリンクエラーについて

    DLL作成初心者です。 当方で簡単なDLLを作成しました。 試しに、下記の呼び出しAP(EXE)を作成しようと したのですが、リンクエラーになります。 どうしてでしょうか? 呼び出しAP #include <windows.h> int main(){ static HINSTANCE hDLL; hDLL = LoadLibrary(TEXT("DLL_TEST.DLL")); if (hDLL) FreeLibrary(hDLL); return 0; } リンクエラーは下記 IBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/TEST.exe : fatal error LNK1120: 外部参照 1 が未解決です また上記"_WinMain@16"のライブラリーをリンクさせると SCRNSAVE.LIB(scrnsave.obj) : error LNK2005: _main はすでに test.obj で定義されています SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverConfigureDialog@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_RegisterDialogClasses@4" は未解決です Debug/TEST.exe : fatal error 等のエラーになります。 解決策を教えてください。

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

  • BCBで作成したDLLを、VC++で静的リンクさせる方法

    BCBで作成したDLLを、VC++で静的リンクさせる方法 Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるように LIBファイルに変換したいのですが、上手くいきません。 下記の手順を踏みました。 1. BCBでDLL作成   「VC++スタイルのDLL」で作成、   「VCLを使う」「CLXを使う」「マルチスレッドを使う」はチェックせず 2. コマンドラインで「IMPDEF.exe」を使用して、dllからdefファイル作成   (IMPDEF.exeは、\Borland\CBuilder6\Binに格納されていた) 3. コマンドラインで「LINK.exe」「LIB.exe」を使用して、defからlibファイル作成   (LINK.exeとLIB.exeは、\Microsoft Visual Studio\VC98\Binに格納されていた) 4. VC++プロジェクトファイルを保存したフォルダに、DLLファイルとlibファイルをコピー 5. VC++の「プロジェクト」-「設定」-「リンク」-「オブジェクト/ライブラリモジュール」に   作成したlibファイルを追加 VC++プロジェクトをビルドすると、下記のエラーメッセージが表示されます。 ///////////////////////////////////////////////////////////////////////////////// dllread.obj : error LNK2001: 外部シンボル "__imp__(関数名)@0" は未解決です LIBC.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Release/dllread.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー ///////////////////////////////////////////////////////////////////////////////// BCBとVC++のバージョンは、下記の通りです。 BCB Professional 6.0 VC++ 6.0 ちなみに、同じDLLを動的リンクで利用することは出来ました。 初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら 教えていただけないでしょうか?

  • Cで作成したDLLをJNIから呼び出せない

    WindwosCEでC言語のDLLを作成してJNIから実行すると エラーになってしまいます。 ※C++で作成したApplicationからは呼び出せました ソールはこんな感じです・・・ ---------------------------------------------------------------- import java.util.*; public class CgiChk { public static void main(String[] args) throws Exception { System.loadLibrary("pimapi"); //既存のDll(\windows下)は読込める System.loadLibrary("TestDll");//自作のは読込めない } } 困っています。どなたか解決法のわかる方いらっしゃいますか。

  • 2回目からはLoadLibrary()が"cnpdsdk.dll"を読み込み失敗する。

    初回はLoadLibrary()が"cnpdsdk.dll"が成功するが、2回目からはLoadLibrary()が"cnpdsdk.dll"を読み込み失敗してしまいます。原因は何なのでしょうか? // ----------------------------------------------------- // (7):指定された実行可能モジュールを、呼び出し側プロセスのアドレス空間内にマ ップ // ----------------------------------------------------- hDLL = LoadLibrary(PDSDK_DLL); if(hDLL == NULL){ // エラー処理 MessageBox("実行可能モジュールのマッピングに失敗しました","LoadLibrary() failed", MB_OK|MB_ICONEXCLAMATION); FreeResource(); // リソース解放 m_Combo_SelectPrinter.SetCurSel(-1); // 現在の選択項目を削除(使用するプリンタ) return; }

  • DLLとインポート、エクスポート

    環境 Microsoft Visual C++ DLLはWin32 Dynamic-Link Library ExeはWin32 Application で作成しています。 DLLにメッセージボックスを表示するのみの処理の関数があり。 Exe側でその関数を使用したいだけです。 DLLのヘッダファイルにエクスポートしたい関数を _declspec(dllexport) void exportmain(); としています。 Exeではインポートを __declspec(dllimport) void exportmain(); としています。 プロジェクト⇒設定⇒リンクにlibファイルの設定もしています。 dll、libファイルの場所も問題ないと思います。 しかし、ビルドすると「外部シンボル~~未解決です」とエラーがでてしまいます。なにか原因がわかるかたおりましたら、ご教授お願い致します。

専門家に質問してみよう