首页 > 解决方案 > 将函数传递给动态链接库

问题描述

我需要在动态链接库项目中传递函数。在这个项目中,我有两个功能:

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
        }
    }
}

solve-serial从外部程序调用,它将获得我需要在我将使用它&setup的函数内部传递的函数。start

这是solver::TSolver_Setup这样的:

using TObjective_Function = double(IfaceCalling*)(const void *data, const double *solution);

struct TSolver_Setup {
    const TObjective_Function objective;
};

我怎样才能通过这个功能?我无法更改solver::TSolver_Setup,但我可以更改start(或同一文件中的变量)。

标签: c++visual-studiofunctiondllfunction-pointers

解决方案


修改启动功能以包括设置参考

void start(olver::TSolver_Setup &setup,.....)

呼叫开始:

start(setup,....

调用函数:

setup.objective(data,solution)

推荐阅读