C++ 如何在运行时添加代码
我在搜索所有的问题,但没有一个回答我的问题。我有一个游戏引擎,我想在运行时加载玩家AI(用c++编写)C++ 如何在运行时添加代码,c++,windows,C++,Windows,我在搜索所有的问题,但没有一个回答我的问题。我有一个游戏引擎,我想在运行时加载玩家AI(用c++编写) 点击按钮,文件对话框出现 选择带有AI的文件(.dll或其他内容?) 点击“开始”按钮,游戏开始使用我添加的AI 人工智能可以是一种方法,也可以是整个类,这无关紧要。我想我应该生成.dll,但我不知道怎么做。此类应如下所示: class PlayerAI { void computeSomething(list of argument, Object& output)
class PlayerAI
{
void computeSomething(list of argument, Object& output)
{
// some logic
}
}
既然您提到了已经编译的DLL,那么您需要查看和。这就是如何在运行时加载DLL并从中提取特定函数的方法
示例可在下找到。假设纯Windows平台,因为未指定- 如果要插入DLL,请首先使用LoadLibrary函数获取其句柄,如下所示:
HINSTANCE handleLib;
handleLib = LoadLibrary(TEXT("YourDLL.dll"));
(func) (L"TESTSTRING HERE");
然后可以获得指向库中特定函数的函数指针。像这样:
FUNC_PTR func;
func = (FUNC_PTR) GetProcAddress(handleLib, "yourFunc");
然后您可以这样调用函数:
HINSTANCE handleLib;
handleLib = LoadLibrary(TEXT("YourDLL.dll"));
(func) (L"TESTSTRING HERE");
完成后,调用FreeLibrary(libhandle)
如何在VS中声明导出的函数如下(这是在DLL中标记要预编译的函数所必需的:
__declspec(dllexport) int __cdecl yourFunc(LPWSTR someString)
{
//Code here...
}
注意:DLL导出通常不适合C++类。你可能想要使用C兼容的接口(如果需要的话,可以在引擎下使用C++类);C++的名字和ABI不适合这个用例。如果问题被标记为“Windows”无论如何,这将是一个肯定的决定。处理计算世界的POSIX部分。@DevSolar你的意思是除了问题中的note.dll还是什么?@Angew:在Linux中:
echo“int main(){}>somefile.dll
Whoops!你可以命名任何文件:P@Angew:我不会根据包含“或其他”的陈述进行假设-还有,总有未来的访问者要考虑,谁会根据问题标题来这里。