1

AWS S3 バケットをプロジェクト (C++ で記述された DLL) に統合しようとしています。バケットに接続し、要件に従って特定のファイルをアップロードする C++ 用に提供された AWS SDK に基づいて、独立したコンソール アプリケーションを作成することに成功しました。同じコードを使用し、すべての依存関係 (dll ライブラリとヘッダー ファイル) を追加すると、DLL プロジェクトはエラーなしでコンパイルされました。ただし、実行中に同じ s3 インスタンスに接続できませんでした。目に見えるエラーはまだありませんが、コードがバケット リストを取得できなかったことがわかりました。私は何かを逃したと確信していますが、それが何であるかはわかりません。参考までに、簡単にするために、以下を使用して AWS バケットに 1 回だけ接続しようとしました: InitAPI(options) { ……….. ……….. } Aws::ShutdownAPI( options)

私のコードの単純な概要:

bool FindTheBucket(const Aws::S3::S3Client& s3Client,
    const Aws::String& bucketName) 
{

    Aws::S3::Model::ListBucketsOutcome outcome = s3Client.ListBuckets();
    
    if (outcome.IsSuccess()) 
    {

        
        Aws::Vector<Aws::S3::Model::Bucket> bucket_list =
            outcome.GetResult().GetBuckets();
        for (Aws::S3::Model::Bucket const& bucket : bucket_list)
        {
            if (bucket.GetName() == bucketName)
            return true;
            
        }
        return false;
    }
    else 
        return false;
}

そして、SDK が呼び出されるメイン関数のスニペット....

Aws::SDKOptions options;
    options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Info;
    Aws::InitAPI(options);
    {
        
        Aws::String bucket_name = "testbucket"; // a bucket of the same name exists
        Aws::String region = "us-west-2";
        Aws::Client::ClientConfiguration config;
        config.region = region;
        Aws::S3::S3Client s3_client(config);
    
        if (FindTheBucket(s3_client, bucket_name))
        {
            //do the needful
            std::ofstream myFile(str.c_str());
            myFile.close();
            PutObjectBuffer(bucket_name, str.c_str(),
                layerstr, region);
        }
        else
        {
            //some code…
        }
    }
    Aws::ShutdownAPI(options);
4

0 に答える 0