[英]Using #include variables in void functions C++
在中斷了 15 年之后,我又回到了 C++,並且一直在努力記住如何使 #include 中的變量/函數可用於 void 函數。 目前,我使用的是單個 .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 設置的名稱不太准確,請原諒我;我沒有在我面前運行 dev-studio所以我是憑記憶做這一切的):
libeay32.lib
添加到您的庫文件集(應該已經包含 kernel32.lib、user32.lib 等...通過繼承)。 如果您還使用 SSL_xxx api,則該列表中還需要ssleay32.lib
。有了所有這些,接下來就是您對標頭和包含的函數聲明的實際使用。 您在任何使用 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 調試器的啟動設置)中是最簡單的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.