C++ 将函数传递到动态链接库
我需要传递动态链接库项目中的函数。在这个项目中,我有两个功能:C++ 将函数传递到动态链接库,c++,visual-studio,function,dll,function-pointers,C++,Visual Studio,Function,Dll,Function Pointers,我需要传递动态链接库项目中的函数。在这个项目中,我有两个功能: HRESULT solve_serial(solver::TSolver_Setup &setup, solver::TSolver_Progress &progress) { start(setup.max_generations, setup.population_size, setup.problem_size, setup.lower_bound, setup.upper_bound); } void
HRESULT solve_serial(solver::TSolver_Setup &setup, solver::TSolver_Progress &progress) {
start(setup.max_generations, setup.population_size, setup.problem_size, setup.lower_bound, setup.upper_bound);
}
void start(size_t problem_size, size_t max_generation, size_t population_size, const double* lower_bound, const double* upper_bound)
{
while (t <= MaxGeneration)
{
for (i = 0; i < n; i++)
{
// ---------- HERE I NEED TO USE PASSED FUNCTION -------------
f[i] = function(ffa[i]); // obtain fitness of solution
I[i] = f[i]; // initialize attractiveness
}
}
}
我怎样才能通过考试?我无法更改
solver::TSolver\u设置
,但我可以更改开始
(或同一文件中的变量)。修改开始函数以包括设置参考
void start(olver::TSolver_Setup &setup,.....)
呼叫开始:
start(setup,....
调用函数:
setup.objective(data,solution)
修改启动功能以包括设置参考
void start(olver::TSolver_Setup &setup,.....)
呼叫开始:
start(setup,....
调用函数:
setup.objective(data,solution)
如果我理解的很好的话,你的问题就是如何将函数(或者更准确地说是函数指针)作为参数传递,以及如何使用它们 我知道
setup
包含一个指向名为objective
的函数的指针:
struct TSolver_Setup {
const TObjective_Function objective;
//.... (apparently a lot of other stuff you didn't talk about)
};
我还知道您需要在start
()中调用此函数,在放置占位符注释的行中。但是,不清楚值应该存储在哪里,不清楚应该使用哪些参数,所以我将使用一些假设和占位符。如果您有权访问设置
,您可以执行以下操作:
ffa[i] = setup.objective (&whatdata, &what solution);
但是,由于您没有将设置
传递给启动()
,因此您至少需要通过使用附加参数f
来传递要启动的函数:
void start(size_t problem_size, size_t max_generation, size_t population_size, const double* lower_bound, const double* upper_bound, TObjective_Function f)
{
...
ffa[i] = f (&whatdata, &what solution);// <---------- HERE IT IS ----------
...
}
HRESULT solve_serial(solver::TSolver_Setup &setup, solver::TSolver_Progress &progress) {
start(setup.max_generations, setup.population_size, setup.problem_size, setup.lower_bound, setup.upper_bound, setup.objective);
return 0; // you must return something !
}
如果这不能回答你的问题,请让我知道,以便我调整我的答案。但在这种情况下,你需要首先澄清你的问题到底是什么,你尝试了什么,并提供缺失的元素,让我们重复这个问题 如果我理解得很好的话,您遇到的问题就是如何将函数(或者更准确地说是函数指针)作为参数传递,以及如何使用它们 我知道
setup
包含一个指向名为objective
的函数的指针:
struct TSolver_Setup {
const TObjective_Function objective;
//.... (apparently a lot of other stuff you didn't talk about)
};
我还知道您需要在start
()中调用此函数,在放置占位符注释的行中。但是,不清楚值应该存储在哪里,不清楚应该使用哪些参数,所以我将使用一些假设和占位符。如果您有权访问设置
,您可以执行以下操作:
ffa[i] = setup.objective (&whatdata, &what solution);
但是,由于您没有将设置
传递给启动()
,因此您至少需要通过使用附加参数f
来传递要启动的函数:
void start(size_t problem_size, size_t max_generation, size_t population_size, const double* lower_bound, const double* upper_bound, TObjective_Function f)
{
...
ffa[i] = f (&whatdata, &what solution);// <---------- HERE IT IS ----------
...
}
HRESULT solve_serial(solver::TSolver_Setup &setup, solver::TSolver_Progress &progress) {
start(setup.max_generations, setup.population_size, setup.problem_size, setup.lower_bound, setup.upper_bound, setup.objective);
return 0; // you must return something !
}
如果这不能回答你的问题,请让我知道,以便我调整我的答案。但在这种情况下,你需要首先澄清你的问题到底是什么,你尝试了什么,并提供缺失的元素,让我们重复这个问题