Thursday, September 29, 2022

在 Xcode 使用自己架設的 GitLab

 即使查了很多網頁,還是不知道什麼原因, 在 Xcode  專案無法直接連接到自己架設的 GitLab。

偶然間發現,在 Xcode 專案中引用一個檔案件(ex: FileHasGit.cpp),有使用 GitLab 管理,而在 Xcode 裏的 Source Control 自動把和這個檔案有關的 GitLab 資訊加進 Repositories。

這引發了我的實驗精神,終於發現,在隱藏目錄 .git 裏的 config 檔存著 remote Repositories 的訊息。把這個檔案裏的 url 修改為自架 GitLab 裏的 url,例如:

[core]

bare = false

repositoryformatversion = 0

filemode = true

ignorecase = true

precomposeunicode = true

logallrefupdates = true

[remote "origin"]

url = http://192.168.0.1:10081/Proj1.git

fetch = +refs/heads/*:refs/remotes/origin/*

[branch "main"]

remote = origin

merge = refs/heads/main


即可在 Xcode 裏 push 和 pull 自架 GitLab 的專案。

Thursday, September 22, 2022

DBF 檔案格式

[Reference] 

https://www.796t.com/content/1550563923.html
https://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm 

DBF 是早期開發的資料庫檔案格式,但現在仍被廣泛使用,副檔名為.dbf。一個DBF檔案即是一個資料表(Table)。
DBF 檔案格式包含檔頭及資料區,二者之間以一個位元 (0x0D) 區隔,檔案末端以位元(0x1A)作為結束。 
檔頭包含資料欄位的定義。 檔頭由包含 32 位元的固定長度和多個欄位定義紀錄組成: 
固定長度 32 位元的定義如下:

欄位定義紀錄的定義如下:

位元長度資料型態說明
0-1011char[11]欄位名稱
111char

資料類型 (見下表說明)

12-154
保留未用,填0
161
欄位長度(二進位)
171
欄位數值值精度(二進位)
18-192
保留未用,填0
201
工作區ID
21-3010
保留未用,填0
311
MDX記號


資料類型

代號說明允許輸入的資料
B二進位值文字(?)
C文字文字
D日期YYYYMMDD
G通用文字
N數值-.0123456789
L邏輯?YyNnTtFf(?表示沒有初始化)
MMemo文字


每一筆資料前的控制字元,0x20表示沒有刪除,0x2A表示被刪除。


檔案長度計算:

假設檔案有 4個欄位,長度分別為 12, 14, 16, 18,並有 10 筆資料。

檔頭長度:32 + 32*4 = 160

分隔字元(0x0D):1

資料區:

每筆資料:1 + 12 + 14 + 16 + 18 = 61 (含前面的控制字元)

10筆資料:61*10 = 610

結尾字元(0x1A):1

總檔案長度: 160 + 1 + 610 + 1 = 772




Tuesday, September 13, 2022

Swift call C++ code and class

 [Reference]

https://stackoverflow.com/questions/35229149/interacting-with-c-classes-from-swift

https://stackoverflow.com/questions/2045774/developing-c-wrapper-api-for-object-oriented-c-code/2045860

Swift can not call C++ code directly. C++ code must be wrapped by C, Objective-C or Objective-C++. Swift uses the wrapper (wrapped code) to call C++ code. According to the references, an example is shown as the following:

C++ header (MPoint3.hpp)

#pragma once
class MPoint3
{
public:
    double x;
    double y;
    double z;
};

C wrapper header (MPoint3C.h)

#ifndef MPoint3C_h
#define MPoint3C_h

#ifdef __cplusplus
extern "C" {
#endif

typedef struct
{
    double x;
    double y;
    double z;
} MPoint3C;

MPoint3C* MPoint3_Constructor(void);
void MPoint3_Destructor(MPoint3C*);

#ifdef __cplusplus
}
#endif

#endif


C++ source (MPoint3C.cpp)

#include "MPoint3.hpp"
#include "MPoint3C.h"

#ifdef __cplusplus
extern "C" {
#endif

MPoint3C* MPoint3_Constructor(void)
{
	return (MPoint3C*) new MPoint3;
}

void MPoint3_Destructor(MPoint3C* ppt)
{
	delete (MPoint3*)ppt;
}

#ifdef __cplusplus
}
#endif


Use in Swift (swift.swift)

let pPt = MPoint3_Constructor()   // The type of pPt is UnsafeMutablePointer<MPoint3C>

pPt.pointee.x = 10
pPt.pointee.y = 11
pPt.pointee.z = 12

MPoint3_Destructor(pPt)


Thursday, September 8, 2022

關於 iOS Swift 程式開發的一些事

 

[取用 C++ 的程式碼]

https://stackoverflow.com/questions/32541268/can-i-have-swift-objective-c-c-and-c-files-in-the-same-xcode-project/32546879#32546879

https://stackoverflow.com/questions/35229149/interacting-with-c-classes-from-swift

https://stackoverflow.com/questions/2045774/developing-c-wrapper-api-for-object-oriented-c-code/2045860

Swift 不能直接取用 C++的程式碼,必須先包裝成 C 或 Object-C++ 程式碼再取用。並且需要 Bridgeing-Header。





[Qt] 執行檔需要哪些 Dll?

 1. 使用 Qt  的 windeployqt.exe 工具 (在 C:\Qt\Qt5.14.1\5.14.1\msvc2017\bin\)。   a. 把執行檔 myProgram.exe 放在某個資料夾。   b. 在檔案總管這個資料夾按 Shift 和滑鼠右鍵,開啟 Po...