使用#将变量包含在空函数C和#x2B中+; 我在15年的中断之后回到C++,一直在努力记住如何使变量/函数从空函数中包含到空洞函数中。目前,我使用的是单个.cpp,但将根据需要将函数导出到单独的.cpp以进行调用

使用#将变量包含在空函数C和#x2B中+; 我在15年的中断之后回到C++,一直在努力记住如何使变量/函数从空函数中包含到空洞函数中。目前,我使用的是单个.cpp,但将根据需要将函数导出到单独的.cpp以进行调用,c++,function,encryption,openssl,C++,Function,Encryption,Openssl,我有以下资料: // 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> #incl

我有以下资料:

// 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;
我正在使用Visual Studio 2017 Enterprise和openSSL。有什么建议吗?链路配置参数中是否存在错误陈述的参数

非常感谢您的任何建议! 谢谢
丽塔

当设置Visual Studio项目以使用OpenSSL SDK构建时,您应该执行以下操作(如果Visual Studio设置的名称不太准确,请原谅;我前面没有运行dev Studio,所以我是从内存中执行这些操作的):

  • 找到您将要使用的OpenSSL构建。对于此列表的其余部分,该文件夹将称为OpenSSLDir
  • 确保OpenSSLDir中的SDK与Visual Studio构建体系结构匹配。如果您使用的是x86 OpenSSL sdk构建,那么您的项目也需要是x86。x64也是如此
  • 在OpenSSLDir中有一系列子文件夹:bin、lib、include等。注意include和lib文件夹,我们需要它们
  • 在VisualStudio项目中,在C++配置设置下(调试和发布构建配置)都是一个“附加目录”设置。
  • 在同一个项目中,在链接设置下是“附加库目录”,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调试器的启动设置)中是最简单的方法。

    stackoverflow的一般经验法则是,如果您遇到错误(编译时或运行时)将完整的错误消息复制并粘贴到您的问题中。EVP_CIPHER和EVP_CIPHER_CTX实际上是在中定义的,并且该文件包含在中。不确定为什么这对您不起作用。您可以尝试在OpenSSL includes顶部的代码中添加一行
    #include
    。但不确定这是否有帮助。希望您得到答案。您可以在C++中不需要<代码> TyBuffsStult。看起来,在C.写这样的文件可能会更快乐。任何股票OpenSSL SDK构建都有一个名为<代码>的文件夹。该文件夹应该添加到您的项目的包含路径中(因此源代码文件编译)。在该文件夹中是文件夹链
    openssl/*
    。我知道这看起来很混乱,但它可以确保您获得所需的标题。所有openssl标题都应该
    #include
    这一点很重要,因为在这些标题中包含其他标题,其中一些标题也在openssl include文件夹中,并使用相同的名称e、 谢谢大家!我就快到了。只要试着找到cleanup()在哪里,我就可以去了。我的工作电脑上有这个功能(不同版本的openSSL)但我在努力与我的家庭电脑。@ NeilButterworth,我会更好地写在C,但我被指示使用C++和EVP/As。非常感谢@ WoZoCurig!使用最新版本的SDK似乎在VC2017中有点不同。我几乎就在那里。一旦我把OpenSSL的限定符添加到它的包含中。查找大多数项。我仍在查找cleanup()。
    #include <openssl/evp.h>
    #include <openssl/sha.h>
    #include <openssl/aes.h>
    ... etc ...