gpt4 book ai didi

c++ - 使用 C++ 从 .dll 调用带有默认参数的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:09 25 4
gpt4 key购买 nike

我在 .dll 的 header 中定义了一个函数

void calculo(vector<double> A, vector<int> B, double &Ans1, double jj);

在.cpp文件中定义如下:

void calculo(vector<double> A, vector<int> B, double &Ans1, double jj = 36.5);

我使用以下代码从另一个 C++ 代码调用此 .dll:

#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <stdio.h>
#include "TEST_DLL.h"


typedef void(_stdcall *f_funci)(vector<double> A, vector<int> B, double &Ans1, double jj);

int main()
{

vector<double> A;
vector<int> B;
double ans1;
double teste;

HINSTANCE hGetProcIDDLL = LoadLibrary(L"MINHA_DLL.dll");
if (!hGetProcIDDLL) {
std::cout << "could not load the dynamic library" << std::endl;
return EXIT_FAILURE;
}


f_funci Resultado = (f_funci)GetProcAddress(hGetProcIDDLL, "calculo");
if (!Resultado) {
std::cout << "could not locate the function" << std::endl;
return EXIT_FAILURE;
}

Resultado(A,B, ans1, teste);

}

如果我输入 "jj" 参数,函数就会这样工作。但是,由于它在 .dll 中被定义为标准输入,因此没有它也应该可以工作,但如果我尝试它,则不会编译。有没有一种方法可以在从 .dll 加载函数的过程中声明 "jj" 参数具有标准输入值?

尝试使用 Resultado(A,B, ans1); 进行编译会生成以下错误:

error C2198: 'f_funci': too few arguments for call

最佳答案

Default arguments :

Are only allowed in the parameter lists of function declarations

如果您不想默认 header 中的参数,您可以通过重载函数来完成您想要做的事情:

void calculo(const vector<double>& A, const vector<int>& B, double &Ans1, const double jj);
void calculo(const vector<double>& A, const vector<int>& B, double &Ans1) { calculo(A, B, Ans1, 36.5); }

作为奖励评论,请通过不断引用传递 vector,因为按值传递会导致潜在的昂贵复制成本。

关于c++ - 使用 C++ 从 .dll 调用带有默认参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55863108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com