Skip to Content

c++

安裝 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

 

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。

在 ubuntu 編譯 c++ 程式

最近要試著把 c++ 寫的程式放上 ubuntu,終於要來學習這方面的知識了。
 
首先用 VMWare Player 安裝一套 ubuntu LTS 14.04.4,安裝好之後,就寫了一小段 c++ 的 Hello World 程式。
 

一些簡單的單元測試概念

 
去年聽了李維大師的一些講座,那時是第一次聽到「單元測試」,他勸我們要使用,他的說法是,若你要將程式佈署到不同平台,你怎麼知道程式都沒有問題?
 
因為那講座是 Delphi / C++Builder ,是可以把程式佈署在 Windows , Mac , iOS , Android。
 
以前總是自己隨手在程式中寫一些測試程式,一個副程式測試成功,測試的部份就刪除了,長久以來都是這樣。
 
手邊正在改寫一個程式,有跨平台的需求,近來想到此事,就動手寫單元測試,這樣的好處是,未來將程式移到 mac 或其他平台時,就可以直接進行測試,應該可以減少一些平台不相容的隱藏性錯誤。
 
其實單元測試有許多現成的工具,不過我用的 Code::Blacks 剛好沒有(因為要寫跨平台,所以沒有用 C++ Builder),又懶得另外找,而且跨平台之後會不會有同樣的工具也不知道,就自己動手寫簡單的版本。
 
訂閱文章


about seo