C++11 AWS C&x2B+;SDK、SQS thows访问冲突 尝试用AWS C++ SDK创建一个SQL队列 Aws::SDKOptions options; Aws::InitAPI(options); Aws::Client::ClientConfiguration configuration; configuration.region = Aws::Region::US_WEST_2; Aws::SQS::SQSClient sqs = new Aws::SQS::SQSClient(Aws::Auth::AWSCredentials("abc", "def"), configuration);

C++11 AWS C&x2B+;SDK、SQS thows访问冲突 尝试用AWS C++ SDK创建一个SQL队列 Aws::SDKOptions options; Aws::InitAPI(options); Aws::Client::ClientConfiguration configuration; configuration.region = Aws::Region::US_WEST_2; Aws::SQS::SQSClient sqs = new Aws::SQS::SQSClient(Aws::Auth::AWSCredentials("abc", "def"), configuration);,c++11,amazon-web-services,aws-sdk,amazon-sqs,C++11,Amazon Web Services,Aws Sdk,Amazon Sqs,在Windows、64位、VC++上运行 当我运行时,我将遇到访问冲突: Exception thrown at 0x000007FEE4E9C83C (aws-cpp-sdk-core.dll) in TestDB.exe: 0xC0000005: Access violation reading location 0x0000000000000000. 这将发生在sdk调用链的深处。这里没有可以作为空指针传递的参数,所以我不确定它可以是什么。我能够在没有问题的情况下运行S3,只有SQS 它

在Windows、64位、VC++上运行

当我运行时,我将遇到访问冲突:

Exception thrown at 0x000007FEE4E9C83C (aws-cpp-sdk-core.dll) in TestDB.exe: 0xC0000005: Access violation reading location 0x0000000000000000.
这将发生在sdk调用链的深处。这里没有可以作为空指针传递的参数,所以我不确定它可以是什么。我能够在没有问题的情况下运行S3,只有SQS

它看起来像是缺少初始化(但是调用了Aws::InitAPI(选项);或者是内存管理(我使用默认设置)。最新的SDK版本

任何帮助或想法都将不胜感激

-义海

将调用更改为使用Aws::SQS::SQSClient*,将所有NuGet软件包更新为最新版本(以x.60结尾)。这是堆栈跟踪:

aws-cpp-sdk-core.dll!000007fee4dfd4bc() Unknown
aws-cpp-sdk-core.dll!000007fee4d07962() Unknown
aws-cpp-sdk-core.dll!000007fee4d30a11() Unknown
aws-cpp-sdk-core.dll!000007fee4d301a5() Unknown
aws-cpp-sdk-core.dll!000007fee4d02710() Unknown
aws-cpp-sdk-sqs.dll!000007fee4ffe4e1()  Unknown
aws-cpp-sdk-sqs.dll!000007fee5046872()  Unknown
aws-cpp-sdk-sqs.dll!000007fee5046968()  Unknown
aws-cpp-sdk-sqs.dll!000007fee5046778()  Unknown
aws-cpp-sdk-sqs.dll!000007fee502f125()  Unknown
aws-cpp-sdk-sqs.dll!000007fee5002986()  Unknown
aws-cpp-sdk-sqs.dll!000007fee4fd2198()  Unknown

TestDB.exe!AmazonSQSQueue::AmazonSQSQueue(std::basic_字符串,std::分配器>队列标识符,Aws::Auth::AWSCredentials*cred)第263行++

TestDB.exe!AmazonQueuesHolder::initilizeSQS(std::basic_string<char, std::char_traits<char>,std::allocator<char> > accessKey, std::basic_string<char,std::char_traits<char>,std::allocator<char> > secretKey, std::basic_string<char,std::char_traits<char>,std::allocator<char> > incommingQueueName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > highPriorityQueueName, std::basic_string<char,std::char_traits<char>,std::allocator<char> > lowPriorityQueueName) Line 198   C++
TestDB.exe!SQSTest::SQSTest() Line 18   C++
TestDB.exe!testSQS() Line 24    C++
TestDB.exe!main(int argc, wchar_t * * argv) Line 183    C++
[External Code]
TestDB.exe!AdvasQueNeStHeals::SistListSqs(STD:StudioStaskAccess KEY,STD::Basic字符串SytTy键,STD::Basic字符串不一致队列,STD::Basic字符串HyrPrimRealQuealNeNeNd,STD::Basic字符串RoPixRealQueNeNeNe)198行C++
TestDB.exe!SqSTest:(18)C++
TestDB.exe!(24)C++
TestDB.exe!主(int ARCC,WCHARGET**ARGV)183行C++
[外部代码]

经过调查,这是由于链接类型不匹配造成的。Aws cpp sdk核心是静态链接的,而Aws cpp sdk sqs是动态链接的。将nuget包更改为使用相同的链接类型将解决此问题。

它可以编译,而另一种方法则不能。在任何情况下,这都不会在dll的深处导致此错误。我可以查看更多上下文吗?您发布的示例会出现问题的原因有很多,但我怀疑您实际上并不是这样做的。例如,您是否在同一进程中多次调用InitAPI。是调用ShutdownAPI()等的其他内容…不幸的是,这是上下文。通过调试器逐步完成。我将所有内容打包在一个dll中,并从一个简单明了的测试程序调用。只有一个InitAPI调用,还没有调用ShutdownAPI。当我需要一个S3客户机时,我可以运行相同的序列。我很乐意尝试其他的方法,但它确实很早就崩溃了。有什么具体的想法可以让我去寻找吗?所以给它编译的堆栈对象实例分配一个指针会出错。是哪条线在抛出故障。我需要您将其缩小到导致问题的代码行,以便他能够提供帮助。我调用这一行并在返回之前失败:Aws::SQS::SQSClient SQS=new Aws::SQS::SQSClient(Aws::Auth::AWSCredentials(“abc”、“def”)、configuration);两件事。1.依我拙见如果堆栈上的返回地址定义错误,则只有在从调用返回可能损坏堆栈的地址后,才会导致问题。在那之前,它没有理由失败,但它不会回来。2.访问冲突读取位置0x0000000000000000指向0x000007FEE4E9C83C(aws cpp sdk core.dll)处的空(未初始化?)指针,该指针是aws dll。