在 void 函数中使用 #include 变量C++
Using #include variables in void functions C++
在中断 15 年后,我又回到了C++,并且一直在努力记住如何使 #include 中的变量/函数可用于无效函数。 目前,我使用的是单个.cpp但会将函数导出到单独的.cpp,以便根据需要调用。
我有以下几点:
// C++
#include <stdio.h>
#include <iostream>
#include <math.h>
#include <errno.h>
#include <cstring>
// OpenSSL
#include <evp.h>
#include <aes.h>
#include <rand.h>
#include <err.h>
#include <buffer.h>
using namespace std;
typedef struct _cipher_params_t {
unsigned char *key;
unsigned char *iv;
unsigned int encrypt;
const EVP_CIPHER *cipher_type;
}cipher_params_t;
EVP_CIPHER在 evp.h 文件中,但似乎找不到它。 我的包含路径似乎正在工作,因为我在键入 #include<> 时可以看到/选择模块,并且在其他包含 (aes.h( 中找到其他变量。
此外,在下面的函数中,来自 evp.h 的项目无法识别,例如 EVP_CIPHER_CTX *ctx,即使它被声明,而其他项目是从其他包含(如 err.h(解析的。
void file_encrypt_decrypt(cipher_params_t *params, FILE *ifp, FILE *ofp) {
/* Allow enough space in output buffer for additional block */
int cipher_block_size = EVP_CIPHER_block_size(params->cipher_type);
unsigned char in_buf[BUFSIZE], out_buf[in_buf + cipher_block_size];
int num_bytes_read, out_len;
EVP_CIPHER_CTX *ctx;
:
:
我正在使用带有openSSL的Visual Studio 2017 Enterprise。有什么建议吗? 链路配置参数中的参数陈述错误?
任何建议将不胜感激! 谢谢 对手
将Visual Studio项目设置为使用OpenSSL SDK构建时,您应该执行以下操作(如果Visual Studio设置的名称不太正确,请原谅我;我没有在我面前运行开发工作室,所以我是根据记忆完成所有这些工作的(:
- 找到您将使用的 OpenSSL 构建版本。对于此列表的其余部分,该文件夹将称为OpenSSLDir。
- 确保 OpenSSLDir 中的 SDK 与您的 Visual Studio 构建架构匹配。如果您使用的是x86 OpenSSL sdk构建,则项目也需要是x86。x64 也是如此。
- OpenSSLDir中有一系列子文件夹:bin,lib,include等。 注意包含和lib文件夹,我们需要它们。
- 在 Visual Studio 项目中,在"C++配置设置(调试和发布生成配置("下,是"其他包含目录"设置。OpenSSLDir/include 文件夹的完整(或相对(路径应添加到该位置
- 在同一项目中,在链接设置下是"其他库目录",应在此处添加 OpenSSLDir/lib 文件夹。
- 在同一项目中,在链接设置下是"其他库输入"(这是我可能最糟糕的名称/位置,但您应该能够找到它(。在这里,您将
libeay32.lib
添加到库文件集中(应该已经包含kernel32.lib,user32.lib等...通过继承(。如果还使用 SSL_xxx API,则还需要ssleay32.lib
该列表。
完成所有这些操作后,即可对标头和包含的函数 decls 进行实际使用。在您使用OpenSSL API的任何地方都应该通过相关标头拉入该API。因为 OpenSSLDir/include 在包含路径中,所以你已经完成了一半。所有 OpenSSL 标头都应以以下格式包含:
#include <openssl/evp.h>
#include <openssl/sha.h>
#include <openssl/aes.h>
... etc ...
OpenSSL 标头经常(阅读:保证发生(包括 SDK 中的其他标头,这些标头包含完全相同的命名法。因此,将其设置为以相同的方式为您(以及他们(工作至关重要。按照我提供的说明,它应该可以工作。
我将确保构建平台的libeay32.dll
和ssleay32.dll
在实际运行程序时位于正确的路径或当前工作目录中的任务留给您。确保 OpenSSLDir/bin 文件夹位于我们的路径(或 Visual Studio 调试器的启动设置(中是最简单的方法。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 将数组的地址分配给变量并删除
- 为"adjacent"变量赋值时出现问题
- enum是C++中的宏变量还是整数变量
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 用C++中的一个变量定义一个常量
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 你能重载对象变量名本身返回的内容吗
- 内置函数可查看CPP中的成员变量
- 是否可以初始化不可复制类型的成员变量(或基类)
- 尝试通过多个向量访问变量时,向量下标超出范围
- 试图让变量检查数组中的某些内容
- Cpp-Tuple使用带有变量的get
- 在 void 函数中使用 #include 变量C++
- 在预处理器命令中使用 qmake 变量 #include
- 如何避免涉及全局变量的循环 #include?
- VS2010没有通过环境变量找到#include
- 编译器会删除未使用的函数、定义、变量、宏、include等吗?
- 苏格兰人;汇编程序的构造变量include directory;