Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在运行时添加代码_C++_Windows - Fatal编程技术网

C++ 如何在运行时添加代码

C++ 如何在运行时添加代码,c++,windows,C++,Windows,我在搜索所有的问题,但没有一个回答我的问题。我有一个游戏引擎,我想在运行时加载玩家AI(用c++编写) 点击按钮,文件对话框出现 选择带有AI的文件(.dll或其他内容?) 点击“开始”按钮,游戏开始使用我添加的AI 人工智能可以是一种方法,也可以是整个类,这无关紧要。我想我应该生成.dll,但我不知道怎么做。此类应如下所示: class PlayerAI { void computeSomething(list of argument, Object& output)

我在搜索所有的问题,但没有一个回答我的问题。我有一个游戏引擎,我想在运行时加载玩家AI(用c++编写)

  • 点击按钮,文件对话框出现
  • 选择带有AI的文件(.dll或其他内容?)
  • 点击“开始”按钮,游戏开始使用我添加的AI
  • 人工智能可以是一种方法,也可以是整个类,这无关紧要。我想我应该生成.dll,但我不知道怎么做。此类应如下所示:

    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:我不会根据包含“或其他”的陈述进行假设-还有,总有未来的访问者要考虑,谁会根据问题标题来这里。