2017-04-20 240 views
0

我即將開發一個應該與DLL分發的API。因爲我無法直接測試我寫在DLL中的代碼,所以我必須在測試項目中加載DLL並在那裏運行它。C++加載DLL

我使用視覺工作室2015年在那裏,我做了一個Testproject和範圍內的,我做我的DLL項目:

解決方案樹 「TestProject」

  • DLLProject

  • TestProject

我導出虛擬函數來測試,如果我我能夠加載DLL:

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

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

然後,在我的Testproject,我嘗試加載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/CLR-Consoleprogramm」項目,而DLLProject是一個「Visual C++/Windows/DLL(通用Windows)」 - 項目:D – Rockettomatoo

+0

@GSerg你所有的進程監視器給我,是一個「創建過程」。從我的DLL – Rockettomatoo

回答

-1

這可能是由鏈接器設置引起的。確保在鏈接器設置中指定「/ APPCONTAINER:NO」。

+0

寫在我的問題:我正在使用Visual Studios我在哪裏可以指定這個? :D – Rockettomatoo

+0

我沒有在這臺電腦上的VS15,所以我不能檢查,但在鏈接器設置它說的地方命令行。你可以很容易地谷歌這部分 –