如何在运行时添加代码

时间:2015-10-06 14:07:43

标签: c++ windows

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

  1. 点击按钮,出现文件对话框
  2. 选择AI文件(.dll或其他什么?)
  3. 点击'开始'按钮,游戏开始使用我添加的AI。
  4. 人工智能可能是一种方法或整个班级,但这并不重要。我想我应该生成.dll,但我不知道该怎么做。这个类应该是这样的:

    function detectCollision(){
    
        alert(document.getElementById("obstacle").style.left)
    
        while(true){
            var temp = getObstaclePosition();
    
            var temp2 = getPlanePosition();
            if(temp[0] <= temp2[0]+500){
                document.getElementsByClassName("plane")[0].style.display = "none";
                break;
            }
        }
    }
    

2 个答案:

答案 0 :(得分:3)

由于您提到已编译的DLL,因此您需要查看LoadLibraryGetProcAddress。这就是你如何运行DLL的运行时加载并从中提取特定的函数。

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

答案 1 :(得分:3)

假设纯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... 
}