我正在为本地C ++编写一个'骨架'前端,供其他用户使用,我将根据传入的参数“调用”这些函数。例如:
skeleton.exe /foo param1
将用于调用我骨架内的函数"int doFoo(param1){return 0;}"
。随着更多团队成员编写函数,我还需要添加这些函数。
一个流浪的想法 - 我甚至不确定这是否可能 - 将有一个资源文件 - 或者,可能是一个资源xml文件 - 将列出命令行参数,数量参数,然后我需要为该参数调用的函数。所以上面的资源文件看起来像是:
foo 1 doFoo
这样,当人们创建他们的功能时,他们所要做的就是将它添加到资源文件中。
我遇到的问题 - 以及我想知道它是否可能 - 是否可以“解释”'doFoo'
作为函数从资源文件中读取。是否有任何东西可以让我“解释”一个字符串作为我可以调用的函数?
答案 0 :(得分:1)
您需要将映射字符串添加到函数指针中。
一种方法是创建一个查找表,另一种方法是使用std::map
。
在互联网上搜索" c ++ dispatch"也许" c ++ double dispatch"。
答案 1 :(得分:0)
我想我已经拥有了!我只需要确保用extern "C" __declspec(dllexport)
声明每个添加的函数!例如:
extern "C" __declspec(dllexport) int square(int x)
{
return (x*x);
}
typedef int(__cdecl *MYPROC)(int);
int _tmain(int argc, _TCHAR* argv[])
{
LPCSTR funcName = "square";
HMODULE hMod = GetModuleHandle(NULL);
if (hMod != NULL)
{
cout << "hMod is not NULL!" << endl;
MYPROC abstractSquare = (MYPROC)GetProcAddress(hMod, funcName);
if (NULL != abstractSquare)
{
cout << "abstractSquare is not NULL!" << endl;
int y = (abstractSquare)(10);
cout << "y = " << y << "!" << endl;
}
else
{
cout << "abstractSquare is NULL!" << endl;
}
}
else
{
cout << "hMod is NULL!" << endl;
}
return 0;
}