Skip to Content

BCB

安裝 Embarcadero RAD Studio 10.3 後遇到 Android 無法編譯的問題

昨天 (2018/12/14) 去蓮潭會館參加李維老師主講的 RAD Studio 10.3 產品內容說明。

講座中提到這一版的 Android SDK 安裝有問題,要看 10.3 安裝目錄的 readme 說明,否則無法順利編譯 Android 程式。

回家後就立刻測試,果然一個空白的  Android 編譯都會有錯誤。找到了要看的說明會連到這一頁

http://docwiki.embarcadero.com/RADStudio/Rio/en/Release_Notes

在 Android 那一段,一開始提到要在這個目錄

C:\Users\Public\Documents\Embarcadero\Studio\20.0\CatalogRepository\AndroidSDK-2525_20.0.32429.4364\tools
執行這個動作
android.bat update sdk --no-ui --all --filter platform-tools,build-tools-28.0.2,android-26
不過我的安裝並沒有那個目錄,也就無法順利進行。
 
後來才跳過這一段,直接做底下的動作。也就是到主功能表的
 
Tools > Options > Deployment > SDK Manager
 
把原來的 Android SDK 25.2.5 32-bit 刪除,重新安裝一次。
 
安裝的位置我是選擇 c:\Users\Public\Documents\Embarcadero\Studio\20.0\PlatformSDKs
 
就成功安裝完成,也順利編譯成功 Android 的程式。
 

Perl C++ C# 使用 POST GET 存取 JSON 等網路資源

 

前言

因為工作上有需要使用 POST 存取網路上的 JSON 資料,最初得到的方法是使用 CURL,但一開始就失敗了。後來改用程式來測試,希望藉由程式傳回的資料來找出錯誤的原因。結果由 CRUL、Perl、C++、C# 一路用過去,一直都失敗。

最後,在 C# 終於試出一組成功的方法,再利用這個成功的模式一路再試回其他程式,最後只有 CURL 還是失敗,其他都成功了,所以在此記錄結果。

 

初試啼聲:CURL

最初得到的方法是使用 curl ,格式如下:

 

curl -X POST http://localhost/test.php -H "content-Type: application/json" -d '[{"src":"如是我聞"}]'

 

在 Win10 底下也有 curl,測試時卻失敗。使用 Mac 和 Linux 系統的人則告知有得到正確的結果。

首先上網查詢,有人說要把傳出去的字串最外面的單引號改成雙引號,裡面的雙引號要加斜線。

 

"[{\"src\":\"如是我聞\"}]"

 

結果還是失敗。

最後我知道這樣是正確的,只是送出去中文變成亂碼,我改用 code page  65001 送出資料也是不行,但若送英文資料則沒有問題。

 

使用 C++ Builder 撰寫 Android 程式

使用 C++ Builder 撰寫 Android 程式

安裝 C++ Builder Android

本篇參考此頁的說明

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Android_Mobile_Application_Development

在安裝 C++ Builder 時,或是在已安裝好的系統上,要安裝 Android 的相關資料。

 

解決 Embarcadero C++ Builder 10.2 頻繁出現 LME200 Unable to perform link 的錯誤

今天編輯程式,不斷出現這個問題。

[ilink32 Warning] Warning: Error detected (LME200)

[ilink32 Error] Error: Unable to perform link

這問題其實在好一陣子之前已經出現過,當時的解決方法是把 C++ Builder 和我寫的程式目錄都設為防毒程式的白名單,就沒有這個問題了。

後來的日子,偶爾還是會出現,但有時重新編譯二、三次,問題就不見了。因此也沒有特別去管它。


今天情況有點不同,出現次數非常頻繁,多到讓我受不了,無法再寫程式,只好上網求助 Google 大神。

有人提到一個方法,它說在這個目錄下 

C:\Program Files (x86)\Embarcadero\Studio\xxx\bin

找到 ilink32.exe

按滑鼠右鍵選內容 -> 相容性 -> 相容模式 ,選擇相容於 Windows 7

另外還建議把 ilink32.exe 設定成以系統管理員身份執行,同時  C++ Builder 也用系統管理員身份執行

一開始我只用相容 Windows 7 就解決問題了。結果正在寫本文時,重新測試,突然發現上面三種方法都用也不行了。(悲哀 sad)

再來找其他方法吧 .....

自己寫一個 GUI 版 C++ Builder 單元測試

最近在寫一個較大的專案,而且要能在 Windows 和 Mac 上執行(Android 和 iOS 以後再考慮),加上第一次用新版 C++ Builder 跨平台的版本寫大專案,所以凡事起頭難,這也是第一次想加上單元測試,以利後續檢查與驗證。

C++ Builder 上面宣稱已有跨平台版本的 DUnitX,詳見如下:

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/DUnitX

主要方法是在 __published 的宣告範圍內寫下要測試的程式,然後自行把每一個測試程式寫進去,執行時就會逐一執行測試程式,最後把結果列出來,如下圖。

用 #ifdef 判斷作業系統

在程式中若是要因應不同的作業系統而有不同的內容,則可以用底下的方法來處理。

#ifdef _Windows

….. (windows 下的程式)....

#endif

底下是目前在 C++ Builder 實際試出來的。

Win32 下有

_WINDOWS_
_Windows
WIN32
_WIN32
__WIN32__
(注意 : 這個在 Win64 沒有)

Win64 下有

_WINDOWS_
_Windows
WIN32
_WIN32
_WIN64

後來在這裡有查到一些,但沒有我測試的完整

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/WIN32#win32

看來判斷 Windows 可用 _Windows

Win32 則用 __WIN32__

Win64 則用 _WIN64

Android 則用 __ANDROID__

Mac 和 iOS 則用 __APPLE__

iOS 則用 TARGET_OS_IPHONE

32位元手機則用 __arm__

64位元手機則用 __arm64__

利用以上去組合,應該就可以判斷了。

補充: 後來看到這篇 

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Creating_an_iOS_App

提到 iOS 可以使用  TARGET_OS_IPHONE 來判斷。

還有如下例子:

#if (TARGET_OS_IPHONE)
// Code for iOS devices only.
#endif
 
#if (TARGET_OS_IPHONE) && (__arm__)
// Code for 32-bit iOS devices only.
#endif
 
#if (TARGET_OS_IPHONE) && (__arm64__)
// Code for 64-bit iOS devices only.
#endif

 

將 TWebBrowser 設定成 IE 11

C++ Builder 不管是 VCL 或 FireMonkey,都有 TWbeBrowser 元件。在 Windows 系統下,該元件就是一個內嵌的 IE。

其實我很想不要用 IE,希望找到內嵌的 chrome 元件,但目前找到的好像不是很好處理,也擔心日後升級問題,所以在 Windows 下還是暫時先以 IE 為主。

查了說明文件,指出內建的 TWebBrowser 預設的版本是 IE 7。所以我寫了一個很簡單的程式,用 FireMonkey 版的 TWebBrowser,直接連到一個 HMLT5 的網頁

https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video

這個網頁我在 IE 上測試,要 IE 11 才能順利執行。

底下是我的測試程式執行結果,可以看到就是沒有什麼結果。

C++ Builder 處理 3D 物件及動畫

3D 物件程式

參考:http://docwiki.embarcadero.com/RADStudio/Tokyo/en/FireMonkey_3D

C++ Builder 可以處理 3D 程式,主要方法簡述如下。

1. 若要能直接放 3D 物件,一開始就要選 3D Application。

2. 若不是在  3D Application 的程式中想加入 3D 的物件,要先加入 TViewport3D 元件,才能在裡面放 3D 物件。

3. 反之,如果要在 3D Application 放 2D 元件,就要先放 TLayer3D 元件,才可以在裡面放 2D 元件。

在 Win10 用 VMware Workstation Player 12 安裝 Mac OS X 10.12 Sierra 和開發 c++ 程式

在 2015 年 10 月左右,我在 Win7 上試著用 VMware 安裝了 Mac OS X 10.10 Yosemite。(詳見此頁)

在 2016 年 11 月左右,我用 Embarcadero C++ Builder Berlin Update 2 試用版試著撰寫 Mac 版的程式,Mac 的環境就是上面提到的 10.10 Yosemite。(詳見此頁)

如今作業系統已換成 Win10 專業版,單位也買了正式版的 Embarcadero C++ Builder Berlin Update 2,所以打算重頭安裝最新版的 Mac OS X 10.12 Sierra,以期能用最新的環境來測試程式。

以下是工作環境:

作業系統:Microsoft Windows 10 專業版
開發程式:Embarcadero C++ Builder Berlin Update 2 專業版
虛擬程式:VMware Workstation Player 12.5 ( 此處可下載 )
VMware 支援 Mac 程式 : unlock208 ( 此處可找到相關資料 )
Mac OS X 虛擬檔案:Mac OS X 10.12 Sierra ( 別人準備好的版本 )
Mac 下的開發程式:Xcode v8.2.1 ( Mac App Store 可以安裝 )

請注意,我們不知道這個由別人安裝好的系統裡面究竟有沒有藏什麼病毒、後門等東西,所以千萬不要拿來做重要的事情,只能拿來做些測試。如果要做重要的事,請找正確的管道來安裝 Mac OS。

使用 C++ Builder 產生 Mac 版程式

 
本文是要說明如何在 Windows 上執行 Embarcadero C++ Builder (它的前身就是 Borland C++ Builder, BCB),並且產生 Mac 版的程式,讓程式可以在 Mac 上執行。
 
因為幾年前好不容易測試成功過,如今又要重做一次卻忘了流程了,所以才想到要記下來,免得日後自己又忘掉,也可以給第一次做的人參考參考。
 
手中雖然有一台公司的 MacBook Pro,不過裡面的 OS X 是 10.6,這個版本太舊了,至少要 10.8 才能開發。所以我採用虛擬主機中的 Mac OS X 來測試,好處是不用二台機器,缺點當然是效率不好,不過若不是常常需要編譯 Mac 版,應該還可以接受。
 
以前看李維大師演講時,他是在 Mac 中跑虛擬主機 Windows ,然後在 Windows 中執行開發程式,可以想像這就更慢了,因為主要的工作都在虛擬機中執行,而這個方法也是官方建議的方法之一。
 
在 Mac 中也要安裝 Xcode,這是 Mac 下的開發程式,整個原理應該是 C++ Builder 把程式先轉成 Xcode 可以編譯的資料,然後透過連結的程式,請 Xcode 把程式編譯出來,這樣就有可以在 Mac 下執行的程式了。
 
訂閱文章


about seo