2017-04-20 13 views
0

私はDLLを使って配布する必要があるAPIを開発しようとしています。 DLLに書かれたコードを直接テストすることはできないので、DLLをテストプロジェクト内でロードしてそこで実行する必要があります。C++ DLLをロードする

ソリューションツリー "TestProject"

  • DLLProject

  • は私がTestproject、その内で行われたビジュアル・スタジオがあり、2015年を使用しています、私は、DLLのための私のプロジェクトを作りました

  • TestProject

I場合、私はテストするダミー関数をエクスポート

#ifndef EXPORT 
#define EXPORT __declspec(dllexport) 
#endif 

extern "C" { 
    EXPORT int dummy() { 
     return 5; 
    } 
} 

その後、私のTestprojectで、私は、DLLをロードする機能を抽出し、それを実行しよう:DLLをロードすることができる午前

#include <windows.h> 
#include <iostream> 
using namespace std; 

typedef int (__stdcall *dll_func)(); 

int main() { 
    HINSTANCE hGetProcIDDLL = LoadLibrary(TEXT("H:\\path\\to\\project\\Debug\\DLLProject\\DLLProject.dll")); 

    if (hGetProcIDDLL == NULL) { 
     cout << "DLL could not be loaded. " << GetLastError() << endl; 
     return; 
    } 

    dll_func f = (dll_func)GetProcAddress(hGetProcIDDLL, "create"); 

    if (f == NULL) { 
     cout << "Factory function could not be resolved. " << GetLastError() << endl; 
     return; 
    } 

    cout << "Factory function returns: " << f() << endl; 
} 

私はthis questionからほとんどすべてをコピーしました。 残念ながら、私は私のTestprojectを実行して、私のコンソールのプリントアウト:「DLLをロードできませんでした4250」

この時点で、私は本当に何をするか分からない説明hereとしてエラーがbasicly何も言ってないので。研究のビットで、私は答えを得ることができませんでした...あなたが私を助けてくれることを願っています:D

+0

[procmon](https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx)を取得し、テストexeにフィルタを設定し、どのファイル操作が失敗するかを確認します。 – GSerg

+0

多分私は、testProjectは "Visual C++/CLR /コンソール - コンソールプログラム" - プロジェクトであり、DLLProjectは "Visual C++/Windows/DLL(Universal Windows)"です - プロジェクト:D – Rockettomatoo

+0

モニターは私に与えて、 "プロセスの作成"です。私のDLLから見えるものはありません – Rockettomatoo

答えて

-1

これはおそらくリンカーの設定が原因です。リンカ設定で "/ APPCONTAINER:NO"を指定してください。

+0

私はVisual Studiosを使用しています正確にどこでこれを指定できますか? :D – Rockettomatoo

+0

私はこのコンピュータにVS15を持っていないので、私はチェックすることはできませんが、リンカの設定ではどこかにコマンドラインがあります。あなたは簡単にこの部分をGoogleにすることができます –

関連する問題