Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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++_Visual Studio_Function_Dll_Function Pointers - Fatal编程技术网

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 !
}
如果这不能回答你的问题,请让我知道,以便我调整我的答案。但在这种情况下,你需要首先澄清你的问题到底是什么,你尝试了什么,并提供缺失的元素,让我们重复这个问题