C 建筑商10.3 Rio Amazon存储服务示例



我正在尝试将使用C 构建器的TAmazonConnectionInfo的应用程序移动到Amazon Simple Storage Service(S3)上的对象。我有一个版本在C 建造者10.1柏林工作,但是当我尝试将其移至10.3 Rio时,该链接会因未解决的外部错误而失败:

[ILINK32错误]错误:未解决的外部'__fastCall data :: cloud :: Amazonapi :: TamazonStorageservice :: getObjectw(System :: Unicodestring,System,System :: Unicodestring:: Cloudapi :: tcloudresponseinfo *,data :: cloud :: amazonapi :: tamazonregion)'

此错误的最简单再现是:

  1. 创建一个新的C 构建器VCL应用程序
  2. 将tamazonConnectionInfo对象和一个按钮放在表单上,然后双击按钮
  3. 用:

    替换点击处理程序
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        TCloudResponseInfo * ResponseInfo = NULL;
        TAmazonStorageService *StorageService = NULL;
        TStream* stream;
        String ObjectName;
        StorageService->GetObject(ObjectName, ObjectName, stream, ResponseInfo);
    }
    

(我意识到此例程无法使用,因为什么都没有初始化,但这会以最少的代码产生链接错误)。

我查找了一个代码示例,显示了它应该如何工作,但是我无法在系统上找到Rad Studio 10.3 Rio的代码样本,并且似乎没有在Rad Studio Demo Code上为Rio更新了Rio的样本在SourceForge上。

我确实在https://github.com/embarcadero/radstudio10.3demos/tree/tree/master/master/cpp上找到了github上的样品。

我尝试在项目中添加CloudService.lib,但这无济于事。也没有添加:

#pragma link "Data.Cloud.CloudAPI"
#pragma link "Data.Cloud.AmazonAPI"

那么,是否有一个工作的C 构建器样本,该样本在10.3 Rio以下编译和链接?我该如何使该项目进行编译和链接?

问题是Data.Cloud.AmazonAPI.hpp标头内部包含wingdi.h Windows API标头。该标头的宏可代替GetObjectGetObjectA/W

我设法工作的解决方法是将以下内容添加到data.cloud.amazonapi.hpp标头,在#includes结束的位置(第27行周围):

#pragma push_macro("GetObject")
#undef GetObject

然后,在标题末端,在#pragma delphiheader end.之前(第897行)添加以下内容:

#pragma pop_macro("GetObject")

这解决了标题问题,但是您仍然必须围绕要使用该函数的代码添加它,以便它编译,否则它将尝试编译现在不存在编译时不存在的getObjectw。/p>

我也有同样的问题。我刚刚测试了该解决方案,它起作用了!谢谢!

您必须将文件复制到桌面,以便能够对其进行修改,然后在安装目录中重新复制。

我补充说,有必要初始化属性"存储端点"。tamazonConnectInfo组件的名称,您必须从存储桶中创建端点的名称

最新更新