簡體   English   中英

C++ Builder 10.3 Rio 亞馬遜存儲服務示例

[英]C++ Builder 10.3 Rio Amazon Storage Service Example

我正在嘗試移動使用 C++Builder 的TAmazonConnectionInfo訪問 Amazon Simple Storage Service (S3) 上的對象的應用程序。 我有一個在 C++Builder 10.1 Berlin 中工作的版本,但是當我嘗試將它移動到 10.3 Rio 時,鏈接失敗並出現未解決的外部錯誤:

[ilink32 錯誤] 錯誤:無法解析的外部 '__fastcall Data::Cloud::Amazonapi::TAmazonStorageService::GetObjectW(System::UnicodeString, System::UnicodeString, System::Classes::TStream *, Data::Cloud::Cloudapi ::TCloudResponseInfo *, Data::Cloud::Amazonapi::TAmazonRegion)'

此錯誤的最簡單再現是:

  1. 創建一個新的 C++ Builder 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 的代碼示例,而且 SourceForge 上的RAD Studio 演示代碼似乎沒有更新 Rio 的示例。

我確實在https://github.com/Embarcadero/RADStudio10.3Demos/tree/master/CPP上找到了 Github 上的示例,但 Cloud 示例似乎並未針對 C++ Builder 遷移,僅針對 Object Pascal。

我嘗試將CloudService.lib添加到項目中,但這沒有幫助。 也沒有添加:

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

那么,是否有一個可以在 10.3 Rio 下編譯和鏈接的工作 C++Builder 示例? 我怎樣才能讓這個項目編譯和鏈接?

問題在於Data.Cloud.AmazonAPI.hpp標頭在內部包含wingdi.h Windows API 標頭。 此標頭具有一個宏,用於將GetObject替換為GetObjectA/W

我設法開始工作的解決方法是將以下內容添加到 Data.Cloud.AmazonAPI.hpp 標頭中,就在 #includes 結尾的下方(第 27 行左右):

#pragma push_macro("GetObject")
#undef GetObject

然后,在標題的末尾,就在#pragma delphiheader end.之前#pragma delphiheader end. (在第 897 行附近)添加以下內容:

#pragma pop_macro("GetObject")

這解決了標頭問題,但您仍然必須在要使用該函數的代碼周圍添加它,以便進行編譯,否則它將嘗試編譯現在在編譯時不存在的 GetObjectW。

我有同樣的問題。 我剛剛測試了這個解決方案,它有效! 謝謝!

您必須將該文件復制到桌面才能對其進行修改,然后將其重新復制到安裝目錄中。

我補充說,有必要使用您必須從 Bucket 創建的 EndPoint 的名稱來初始化 TAmazonConnectInfo 組件的屬性“Storage EndPoint”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM