2015-10-06 129 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

相关问题