2017-09-22 10 views
1

私は3つのDLLをロードするためにload library関数を使用しています。コンパイル時にDLLが読み込まれないC++、Visual Studio

Picture From VS Picture From VS

しかし、デバッグフォルダから、同じアプリケーション(まったく同じファイルが)それが失敗したことを実行している場合:

Picture From Debug Folder Picture From Debug Folder

Visual Studioの内部で実行しているときにコンパイルされたコードが正常に動作しますDLLファイルをロードするために使用しているコードは次のとおりです。

#include <Windows.h> 

HMODULE dll_cmn = LoadLibrary(L"C:\\LKG5000_DLL_ver1_10\\English\\64bit\\CmnLib.dll"); 
HMODULE dll_drv = LoadLibrary(L"C:\\LKG5000_DLL_ver1_10\\English\\64bit\\KeyUsbDrv.dll"); 
HMODULE dll_if2 = LoadLibrary(L"C:\\LKG5000_DLL_ver1_10\\English\\64bit\\LKIF2.dll"); 

cout << "\n>> Addr dll_cmn: " << dll_cmn << endl; 
cout << " Addr dll_cmn: " << dll_drv << endl; 
cout << " Addr dll_cmn: " << dll_if2 << endl; 

if (NULL != dll_cmn && NULL != dll_drv && NULL != dll_if2) 
{ 
    cout << "\n>> Created .dll Handles Successfully" << endl; 
    //do stuff 
} 

else 
{ 
    cout << "\n>> Failed to Create .dll Handles" << endl; 
} 

写真は.exeが同じフォルダパス内の同じファイルであることを示しているので、私は混乱していますか?

本当にありがとうございます!

+0

MCVEが助けてくれるかもしれません:https://stackoverflow.com/help/mcve –

+2

GetLastErrorを呼び出し、返された値を調べる必要があります。 – VTT

+0

確かに。エラーをチェックしてください。無力にしないでください。システムが失敗した理由を教えてくれます。 –

答えて

0

可能であれば、プロジェクトをもう一度きれいにしてからビルドし直してから、2つの方法で結果を確認してください。

私はVS2007を使ってWindows 64でテストします。私はVSセットアップフォルダに3つのデフォルトdllファイルを使用していますが、結果ウィンドウにすべて成功しています。可能であれば、私のサンプルを使って自分の側でテストすることができます。少なくとも、私たちはそれがあなたのVS環境またはdllファイル自体に関係しているかどうかを知ることができます。

int main() 

{

HMODULE dll_cmn = LoadLibrary(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\ReferenceAssemblies\\v4.5\\Microsoft.ExtendedReflection.dll"); 
HMODULE dll_drv = LoadLibrary(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\ReferenceAssemblies\\v4.5\\Microsoft.ExtendedReflection.Reasoning.dll"); 
HMODULE dll_if2 = LoadLibrary(L"C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\Common7\\IDE\\ReferenceAssemblies\\v4.5\\Microsoft.Pex.Framework.dll"); 

cout << "\n>> Addr dll_cmn: " << dll_cmn << endl; 
cout << " Addr dll_cmn: " << dll_drv << endl; 
cout << " Addr dll_cmn: " << dll_if2 << endl; 


if (NULL != dll_cmn && NULL != dll_drv && NULL != dll_if2) 
{ 
    cout << "\n>> Created .dll Handles Successfully" << endl; 
    //do stuff 
} 

else 
{ 
    cout << "\n>> Failed to Create .dll Handles" << endl; 
} 

getch(); 
return 0;} 

あなたは、関数loadlibraryを使用すると、エラーメッセージを取得する方法について文書をチェックすることができ:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms684175(v=vs.85).aspx

を私はまた、あなたがdllファイルのフォルダを変更示唆、結果を表示します。または、x84プラットフォームを使用して、プロセスを管理者として実行してください。結果を再度表示します。

関連する依存するdllファイルであるかどうかはわかりませんが、間接リンクライブラリが利用できない場合、LoadLibraryは失敗します。したがって、これらのdllファイルに変更があるかどうかを確認する必要もあります。

+0

@Callum Alder、あなたの側に最新情報をお知らせください。 –

関連する問題