2015-10-06 128 views
2

我是通過計算器的問題尋找,但沒有一個人回答我的問題。我有一個遊戲引擎,我想在運行時加載玩家AI(用C++編寫)。如何添加代碼在運行時

  1. 點擊按鈕,文件對話框出現
  2. 選擇與AI文件(.dll或東西嗎?)文件
  3. 點擊「開始」按鈕,遊戲開始使用AI的,我補充。

AI可能是一個方法或全班,也沒關係。我想我應該生成.dll,但我不知道該怎麼做。這個類應該是這樣的:

class PlayerAI 
{ 
    void computeSomething(list of argument, Object& output) 
    { 
     // some logic 
    } 
} 

回答

2

假設因爲沒有指定純粹的Windows平臺 -

如果要注入DLL,首先使用的LoadLibrary功能,像這樣獲得它的句柄:

HINSTANCE handleLib; 
handleLib = LoadLibrary(TEXT("YourDLL.dll")); 

然後您就可以獲取一個函數指針到lib中的特定函數。就像這樣:

FUNC_PTR func; 
func = (FUNC_PTR) GetProcAddress(handleLib, "yourFunc"); 

然後,你可以調用函數像這樣:

(func) (L"TESTSTRING HERE"); 

完成後,調用FreeLibrary(libhandle)

如何聲明爲導出的函數是在VS例如像這樣(這是需要在您的DLL中標記您的函數,您需要預編譯:

__declspec(dllexport) int __cdecl yourFunc(LPWSTR someString) 
{ 
    //Code here... 
} 
3

既然你提到已編譯的DLL,你想看看LoadLibraryGetProcAddress。這就是如何執行DLL的運行時負載並從中提取特定功能的方法。

實例可以Using Run-Time Dynamic Linking下找到。

+0

注意:DLL導出不正常與C++類一起玩吧。你可能會想要使用一個C兼容的接口(如果需要,可以使用C++類); C++的名字和ABI不適合這個用例。 – ShadowRanger

+0

如果問題以任何方式被標記爲「Windows」,這將是一個肯定的upvote。 [這個問題/答案](http://stackoverflow.com/a/24089878/60281)處理計算世界的POSIX部分。 – DevSolar

+2

@DevSolar你的意思是,除了在問題的說明「的.dll或什麼」? – Angew

相關問題