2011年3月13日 星期日
coldfire 縮寫術語
Term Meaning
ADC Analog-to-digital conversion
ALU Arithmetic logic unit
BDM Background debug mode
BIST Built-in self test
BSDL Boundary-scan description language
CODEC Code/decode
DAC Digital-to-analog conversion
DMA Direct memory access
DSP Digital signal processing
EA Effective address
FIFO First-in, first-out
GPIO General-purpose I/O
I2C Inter-integrated circuit
IEEE Institute for Electrical and Electronics Engineers
IFP Instruction fetch pipeline
IPL Interrupt priority level
JEDEC Joint Electron Device Engineering Council
JTAG Joint Test Action Group
LIFO Last-in, first-out
LRU Least recently used
LSB Least-significant byte
lsb Least-significant bit
MAC Multiply accumulate unit, also Media access controller
MBAR Memory base address register
MSB Most-significant byte
msb Most-significant bit
Mux Multiplex
NOP No operation
OEP Operand execution pipeline
PC Program counter
PCLK Processor clock
PLIC Physical layer interface controller
PLL Phase-locked loop
POR Power-on reset
PQFP Plastic quad flat pack
PWM Pulse width modulation
QSPI Queued serial peripheral interface
RISC Reduced instruction set computing
Rx Receive
SIM System integration module
SOF Start of frame
TAP Test access port
TTL Transistor transistor logic
Tx Transmit
UART Universal asynchronous/synchronous receiver transmitter
2010年12月10日 星期五
LINUX 學習心得
趁著這個週末~ 來紀錄一下,學到的東西,以及一些感想。
電腦環境:
- NB: ACER ASPIRE 4741G
- 系統: WIN XP Processional 2002 SP3
- CPU:i5 M460@2.53GHz
- RAM:2.98GB
小弟對這台NB評價.. 效能不錯,照我每次都開兩個瀏覽器,狂開視窗查閱資料,再加上VMware照跑.. 沒什麼大問題發生。 但是周邊裝置就有點不舒適了,USB太靠近使用者,動滑鼠就容易碰到,VGA、網路埠、電源插頭都在左手邊...非常不習慣~也不試用我的工作環境...
但整體而言..免費的就是好用 XD
LINUX環境:
- 版本 Fedora 11 (目前到14)
- 視窗介面: GNOME
目前使用VMware這套虛擬機器來安裝LINUX,很酷的一套軟體,早點知道這東西,以前玩遊戲就可以開分身了XD。
當初建置時沒沒Step by Step記錄下來,就照印象來說囉~
安裝好VMware,新建一個虛擬機器系給LINUX用,要設定磁碟、記憶體大小分給VMware用。
工具列 VM->Options->Guest operating system-> Linux 圈起來,Version->Red Hat Linux
我明明是要裝Fedora, 怎會選小紅帽?? ... 我真的忘了 , 好像裡面沒有Fedora選項吧 ??
開始安裝Fedora
首先,除了Next and Next,會出現的問題,是要分割硬碟(檔案系統)
boot、swap、root 等等,詳細設定 google一下就有了。
安裝設定,軟體、工具、桌面...全開!! 總比之後安裝要自行編譯容易的多XD
從VMware到LINUX裝完~ 花了2.5個小時吧~
這時候會發現即使使用全螢幕模式,我們的系統還是沒辦法真正實現全螢幕
並且鼠標陷在VMware裡頭,要跳出VMware 請按 CRTL+ ALT
先把這給改掉~ 在VMware裡的 快捷設定 設成 CRTL + SPACE
並在工具列中 選擇 Install VMware Tool , 裡面內容...我現在看不到>< ~ google是好朋友XD
安裝完後~ 就可以輕鬆移出鼠標,並且全螢幕實現~
LINUX 桌面環境其實蠻方便的~ 但是當下載軟體原始碼時 需要自己編譯、安裝~ 現在還不知道有沒有其他方式~ 至少我都是在終端機使用的~
剛開始真的不習慣啊~ 連複製檔案 都搞了一陣子 >< 所以 要碰終端機 必學指令 如下:
- 顯示目前路徑檔案列表 : ls ` ll
- 複製檔案至目錄XXX下 : cp
- 移動檔案至目錄XXX下: mv
- 移除檔案 : rm
- 解 壓縮檔 (tar.gz): tar -xvf XXX.tar.gz
- 安裝 : yum , rpm
- 換目錄: cd ` cd .. (回到上一層)
- 搜尋 : whereis `which ` find ` grep
- 查詢指令: man ` xxx --help
- 切換root : su
- 目前路徑: pwd
再來~ 目錄 可分為 root 和 user
登入後 , 會在home/user/ 路徑下面 ,即 ~符號 。
root/ 是根目錄 ,即 / 符號, 也只有root 管理員 能在此目錄進行更多的動作及設定 。
環境設定,指令都熟悉差不多之後,就可以開始程式撰寫了
小弟環境是 使用 KDevelop編輯,掛QT編譯器 剛開始,也是非常不習慣啊>< 但後來發現 ~ 自訂功能非常豐富~ 其實非常方便 上一步這功能很好用 XD ~ 前一陣子看到VS 2010也有這功能 ~
但是目前還是有些問題存在~ 程式中,類別庫會使用到 LINUX C Libary, QT Libray, 自訂Libary
每次想要查詢LINUX Libary(就是跳至定義),時 都無法顯示~ 出現 man錯誤... 之後解決了再說吧~
對了 ~ 這之前還做了一件事 ~安裝 gcin 輸入法。
Fedora 預設安裝的輸入法是Ibus,但沒有新注音... 我也只會新注音所以囉~
安裝 gcin 輸入法
PS. 如果出現了網路無法連接~ 記的要選網路橋接(Bridge)
2010年7月23日 星期五
call by value、address、reference
參考來源 :
ofstream的參數傳虒 為什麼要加 & 運算子? / C++ / 程式設計俱樂部
裡面sflam(Raymond)大大的回覆
-----------------------------------------------------------------------------------------------------------
2007/11/2 下午 10:48:47
我個人覺得 "call by X" 這個說法容易造成誤解, 我比較喜歡用 "pass by X". 因為這裡講的是參數如何傳遞, 而不是函式如何呼叫.
嚴格說起來, C 沒有 "pass by address" 這個東西. 所有的參數都是 "pass by value". 即使傳入的是個位址也是如此. 如果傳入的參數是個位址, 那接收的函式就必須是個指標, 指標所得到的是位址的值, 都是 value.
比方說:
int main()
{
int i;
func(&i);
...
}
void func(int *pi)
{
...
}
在 main() 裡:
int i
+=====+
〔i的位址〕| |
| +=====+
|
|
| 在 func() 裡, pi 得到一份 「i 位址的拷貝」...
|
| int *pi
| +=========+
+----+->〔i的位址〕 |
+=========+
結果就是, func() 裡的 pi 指向 main() 裡的 i:
i
+=====+
| |<--+
+=====+ |
| main()
~~~~~~~~~~~~|~~~~~~
| func()
pi |
+=====+ |
| *---+---+
+=====+
在 func() 裡面更改 pi 所指向的記憶體, 也就更改了 main() 裡面的 i. 如果函式要修改上一層的變數, 在 C 語言裡面唯一的方法就是傳入變數的位址, pass an address. 所傳的方式是這個位址的值, the address is pass by value.
所以 "pass by address" 可以看成是 "pass the address by value".
C++ 除了 C 的 pass by value 外, 也支援 "pass by reference" 的概念. 在概念上, reference 可以看成是一個變數的別名. 更改這個別名的內容也就更改了這個別名所代表的變數內容.
比較看看三種做法在語法上有什麼不同:
〔1: pass by value〕
int main()
{
int i;
func(i);
}
void func(int i2) { ... }
〔2: pass an address by value〕
int main()
{
int i;
func(&i);
}
void func(int *p) { ... }
〔3: pass by reference〕
int main()
{
int i;
func(i);
}
void func(int &i2) { ... }
在 〔1〕 裡, 不管 func() 裡面如何更改 i2, 都不會影響到 main() 裡的 i.
在 〔2〕 裡, func() 是透過 *p 去改變 main() 裡 i 的值.
在 〔3〕 裡, i2 是 i 的別名. func() 更改 i2 的值, main() 裡的 i 也會跟著改變.
在 C 語言裡, 只有 〔1〕 跟 〔2〕 兩種寫法. 要把 〔1〕 改成 〔2〕, 呼叫的地方跟函式的內容都要更改.
在 C++ 語言裡, 三種寫法都可以用. 單單看 main(), 〔1〕 跟 〔3〕是沒有分別的. 要把 〔1〕 改成 〔3〕, 只需把函式的參數加個 '&'.
〔1〕 跟 〔3〕 的最大分別是: 物件的拷貝. 在 〔1〕 裡, 物件會被拷貝. 〔3〕 則不會, i2 跟 i 是同樣的物件.
樓主的問題就是『物件有無拷貝』的問題. 有些物件是不能或不適合拷貝的, 比方說 ostream.
ostream 是個 C++ 物件, 它有一個對應的檔案物件. C++ 物件是個抽象的物件, 在記憶體裡. 它對應的檔案是個實在的物件, 存在磁碟裡. 這兩個物件的 states 必須要一致, 要同步才能 work. 如果這個物件被拷貝了, 那同一個檔案物件就對上了一個以上的 ostream 物件. 只要其中一個 ostream 物件更改了它的 state (比方說在函式裡輸出一些值到檔案裡, 或關閉檔案), 那其他的 ostream 的 state 就跟檔案的 state 不一致, 不同步了. 當然就會造成很大的問題.
所以像這類不適合拷貝的物件, 只能用 〔2〕 或 〔3〕 的方式來做. 用 reference 是比較方便, 因為 pointer 還要用 dereference 的語法.
其它『不能拷貝的物件』的例子還滿多的, 像 MFC 的 CWnd 及所有 CWnd 衍生的物件都是基於同樣的原因, 不能拷貝的物件.
2010年7月13日 星期二
VS2005 inline function 反組譯追蹤
使用行內涵式時,修飾詞inline會告知編譯器,
每當程式碼呼叫此函式時,就會產生一函式副本來取代該函式呼叫,
以便節省呼叫函式的時間。
也就是說,
程式控制權一直在main()裡面(假設在main中呼叫inline函式),
而非每次呼叫函式時便轉移控制權到該函式。
如何在vs2005平台偵錯模式中觀察這個差異?
在專案->屬性
在屬性視窗中,預設debug mode 的內嵌函式展開屬性為"預設"
要觀察行內涵式的反組譯須把偵錯模式改為release,內嵌行式展開設為"僅_inline"
避免編譯時因最佳化關係自動把函式inline起來
~觀察反組譯~

inline function 程式碼已內嵌
一般函式叫用,可以看到第4行 :0040106B call countcubeVolume1 (401140h)
程式執行至此,會call countcubeVolume1 。
2009年6月29日 星期一
fsockopen穿越proxy-以台灣簡訊為例
其實,一樣可以用fsockopen,但我們連線到proxy,在直接下指令給proxy即可
下面範例是在作專題時,使用台灣簡訊來發送客製化簡訊,欲到的proxy是中原大學的proxy.cycu.edu.tw port:3128
<?
$username = "xx"; // 帳號
$password = "xx"; // 密碼
$type = "now"; // 發送型態
$mobile = "0988xxxxxx"; // 電話
$message = "簡訊測試喔"; // 簡訊內容
$encoding = "big5"; // 簡訊內容編碼
$popup = ""; // 使用 POPUP 顯示
$mo = ""; // 使用雙向簡訊
$vldtime = "86400"; // 簡訊有效期限
$dlvtime = ""; // 預約時間
$MSGData = "";
$msg =
"username=".$username."&password=".$password."&type=".$type."&encoding=".$encoding."&popup=".$popup."&m
o=".$mo."&mobile=".$mobile."&message=".urlencode($message)."&vldtime=".$vldtime."&dlvtime=".$dlvtime;
$num = strlen($msg);
// 打開 API 閘道
$fp = fsockopen ("proxy.cycu.edu.tw", 3128);
// print_r($fp);
if ($fp) {
$MSGData = $MSGData."POST http://211.78.23.230/send_sms.php HTTP/1.1\r\n";
$MSGData = $MSGData."Host: api.twsms.com\r\n";
$MSGData = $MSGData."Content-Length: ".$num."\r\n";
$MSGData = $MSGData."Content-Type: application/x-www-form-urlencoded\r\n";
$MSGData = $MSGData."Connection: Close\r\n\r\n";
$MSGData = $MSGData.$msg."\r\n";
fputs ($fp, $MSGData);
// 取出回傳值
while (!feof($fp)) $Tmp[]=fgets ($fp,128);
// 關閉閘道
fclose ($fp);
// 顯示回傳值
$Respone = split(":",$Tmp[9]);
// print_r($Tmp);
$Res["Number"] = $Respone[0]; // 傳回碼
$Res["OrderID"] = $Respone[1]; // 如果傳回碼是 00 成功, 才會有 OrderID 產生
// echo '<BR>$Res["Number"] ='.$Res["Number"];
// echo '<BR>$Res["OrderID"] = '.$Res["OrderID"];
}
?>
上面程式碼其中的211.78.23.230 是台灣簡訊的server,要注意的是
這邊要放 http://211.... 也就是絕對路徑!!
此範例由台灣簡訊API提供的範例程式作修改。
2009年6月19日 星期五
PHP Excel PHPPowerPoint
PHPExcel 及 PHPPowerPoint。
分別可以很簡單地透過 PHP 讀取及寫入 Excel 2007 及 PowerPoint 2007 的檔案
用 PHP 讀寫 Excel 檔案 裡頭有讀取Excel的範例
2009年6月10日 星期三
在IE與FF的一些設計限制
table 的限制,在不同瀏覽器中的問題較大,需要另外處理~
IE中Table、 thead、tbody的innerHTML屬性是唯讀的!!
若用
document.getElementById("tablename").innerHTML = "XXXXX" ;
IE就會跳出「執行階段錯誤」.... ~~另外要注意的是 table與 tr標籤元素,不能用innerHTML方式賦值,但.. td標籤是可以的喔!
在IE與FF的一些設計限制(設定css屬性、註冊事件、checkbox)
1.若要設定元素的class屬性,可以用 setAttribute方法來設定,如下
var inputElmt = document.createElement('input');
inputElmt.setAttribute('class', 'column');
但IE不吃這套,而吃 className 屬性名稱,如下
inputElmt.setAttribute('className', 'column');
所以 ~完整解決方法
var inputElmt = document.createElement('input');
inputElmt.setAttribute('className', 'column');
inputElmt.setAttribute('class', 'column');
寫上兩個~不需要另外辨別瀏覽器!
2.若要為其加入事件
if(document.all) //for IE
{
inputElmt.onclick = function(){ pantosetedArea(this.value) ; };
}
else inputElmt.setAttribute('onClick', "pantosetedArea(this.value)");
其中pantosetedArea(參數)是自訂函式
3.另外,若要產生預設勾選的checkbox
function createInputcheck(elmtName,elmtValue) {
elmtName = elmtName ? elmtName : '';
elmtValue = elmtValue ? elmtValue : 'yes';
var ischecked = (elmtValue=='0')? "false" : "true" ;
var inputElmt = document.createElement('input');
inputElmt.setAttribute('type', 'checkbox');
inputElmt.setAttribute('name', elmtName);
inputElmt.setAttribute('value', elmtValue);
if(elmtValue=="yes") inputElmt.setAttribute('checked', ischecked);
inputElmt.setAttribute('onClick', "checkSMS(this)")
inputElmt.setAttribute('class', 'column');
return inputElmt;
}
var sendSMSInput = createInputcheck('sSMS');
var contentTdM = document.createElement('td');
contentTdM.appendChild(sendSMSInput);
var contentTr = document.createElement('tr');
contentTr.appendChild( contentTdM );
sendSMSInput.setAttribute('checked', true);
在FF中,函式中的此行 if(elmtValue=="yes") inputElmt.setAttribute('checked', ischecked);會馬上成立,但在IE中,要為checkbox 賦值,必須等到 appendchild後才可以操作checkbox 賦值
2009年4月10日 星期五
什麼是 JavaScript
JavaScript
是一種直譯式語言,它可以被嵌入 HTML 的檔之中。可以用來處理一些畫面的特效,例如變換圖片、彈出式的選單、電子時鐘、拼圖遊戲等。不同於伺服器端腳本語言,例如PHP與ASP,JavaScript是client端腳本語言,其原始碼在發往客戶端執行之前不需經過編譯,而是將文字格式的字元代碼發送給瀏覽器由瀏覽器解釋執行,也就是說JavaScript是在用戶的瀏覽器上運行,不需要伺服器的支援而可以獨立運行,隨著網頁下載到你的電腦後,便會自動執行這些程式來做出特效,通過 JavaScript 可以做到回應用戶的需求事件(如表單的輸入),這樣當一位使用者輸入一項資訊時,它不需要通過網路傳送到伺服器端進行處理再傳回來的過程,而可以直接在用戶端進行事件的處理。但因為各家瀏覽器的不同,寫程式時要注意到相容性的問題,比方說獨大的IE就單純只參考W3C的規範,自訂自己的標準,寫程式時要特別注意~
優點是:
可以減少對伺服器的負擔。而隨著伺服器的強壯,雖然現在的程式員更喜歡運行於伺服端的腳本以保證安全,但JavaScript仍然以其跨平台、容易上手等優勢大行其道。
缺點是:
解釋語言的弱點是安全性較差,而且在JavaScript中,如果一條執行不了,那麼下面的語言也無法執行。而且由於每次重新載入都會重新解譯,載入後,有些代碼會延遲至運行時才解譯,甚至會多次解譯,所以速度較慢。
Javascript與Java
JavaScript 和 Java 很相似,但它們卻是完全不同的語言! Java 是由 Sun Microsystem 公司開發的一種面向物件的程式設計語言,類似於C++,它需要多種編譯器和支援檔才能運行;但於 C++ 不同的是,Java 可以獨立於任何操作平臺,因此它就在當今 Internet 網路各種操作平臺的基礎上得以迅速發展。但它是一種比 JavaScript 複雜得多的標準程式語言。JavaScript 則是相對容易瞭解的函數式語言,JavaScript承襲了Java與Perl的語法,JavaScript 撰寫人員可以不那麼注重編程技巧,例如宣告所有的變數、類和方法,您也不必關心諸如 public、 private 或 protected 之類的費解的東西;更重要的是,它只能存在於一個 HTML Script中,而且只有在裝入一個相容的瀏覽器時才能運行,所以許多 Java 的特性在 JavaScript 中並不支持。現在,JavaScript 完全相容於 ECMA-262 標準(歐洲電腦製造協會的 JavaScript 標準);如需瞭解的更多資訊,請參閱 Netscape 的有關 Netscape JavaScript 的介紹(微軟也有一個 JavaScript 的變種,稱之為 JScript)。
因 為Javascript與Java都可以在網頁上做出動態效果,而且JavaScript還可以控制網頁上的Java Applet,所以可以互相搭配。此外,他們也都能配合伺服端程式,做出一些特別的東西;例如Google Map就利用了JavaScript和後端程式的配合,讓地圖上每一格的圖片可以在使用者移動到看到它時才開始載入,以節省流量;此外,Google Mail和Yahoo!Mail的收件者裡打了一個字,通訊錄中以那個字為開頭的帳號就會出現在下方讓你選,這也是一樣的應用。這種技術,稱為AJAX。
JavaScript直譯式語言
編譯語言例 如Java。Java的源代碼在傳遞到客戶端執行之前,必須經過編譯,因而客戶端上必須具有相應平台上的模擬器或解釋器,它可以通過編譯器或解釋器實現 獨立於某個特定的平台編譯代碼的束縛。但是它必須在服務器端進行編譯,這樣就拖延了時間。但因為已經封裝,所以能保證安全性。
因為程式需要編譯後才能用,故就會牽涉到編譯器、連結器、函式庫 .... 等等各式各樣的跨平台問題,等著我們去傷腦筋。
然而,另外有一類的語言所寫出的程式是不需要「編譯」的,稱之為「直譯式語言」,這類語言只需要一個直譯器 (interpreter) 來做程式碼的翻譯,就可以完成我們想做的工作。故使用直譯式語言顯然就單純許多,比較沒有跨平台方面的問題。
JavaScript 是一種動態資料類型語言,也就是說,當聲明一個變數時不必指定資料的類型,當程式執行時它會自動將其轉換為所需要的類型。而當在一個運算式中將一個字串類型的值和數值型的值進行“+”運算時,JavaScript 會將數值轉換為字串
2009年3月31日 星期二
網頁開發除錯工具
適用 FireFox -- Firebug 1.3.3
適用 IE --(IEDevToolBarSetup.msi) 微軟官方抓下來忘了留網址,自己找吧!
2009年3月25日 星期三
ASP.NET權限不足,無法使用WINDOWS應用程式
撰寫了一個web service掛載於IIS下,web service會透過SKYPE API呼叫本機電腦裡面的應用程式(SKYPE)作發送簡訊的功能。
未發行至IIS下叫用都是正常的,也寫了一個windows form 來叫用確認是可以執行的
但一發布到IIS下,偵錯時卻發生了.. client端程式 出現wait timeout..
開啟web service 偵錯模式,再來看看web service怎說~
web service先參考skype4com.dll,在程式裡new skypeclass()實體為 myskype都OK,下一步
myskype.sendSMS("+886xxxxxxxxx","hello","") 馬上消失,就像正在處理工作一樣程式碼沒有反紅,看不到偵錯情形。
利用try and catch把runtime error抓出來,錯誤顯示
System.Runtime.InteropServices.COMException (0x80040200): Not attached.
於 SKYPE4COMLib.SkypeClass.SendSms(String TargetNumbers, String MessageText, String ReplyToNumber)
於 Service.HelloWorld() 於 c:\Inetpub\wwwroot\WSsendSKYPE2\App_Code\Service.cs: 行 70
怪哉~GOOGLE了很久,沒有一個解決的方法~
問題可能出在"安全性"問題上~
ASP.NET預設使用者使用資源的安全性與windows應用程式預設安全性不同,所以才會有掛載在IIS下的webservice與windows form使用SKYPE.EXE權限不同!
在MSDN tech提到安全性原則部分
有兩個步驟:
1.讓ASP.NET使用者權限提到最高,可以執行、讀取、寫入等等
2.讓SKYPE檔案降低權限可以被設定的使用者群組執行、讀取等
之後再在web service程式碼裡頭加上
System.Diagnostics.Process.Start("Skype.exe"); 允許讀取到此執行檔
System.Diagnostics.Process.Start("Skype.exe");
錯誤顯示 :
{"System.Web.Services.Protocols.SoapException: 伺服器無法處理要求。 ---> System.ComponentModel.Win32Exception: 系統找不到指定的檔案。\n 於 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)\n 於 System.Diagnostics.Process.Start()\n 於 System.Diagnostics.Process.Start(ProcessStartInfo startInfo)\n 於 System.Diagnostics.Process.Start(String fileName)\n 於 Service..ctor() 於 c:\\Inetpub\\wwwroot\\WSsendSKYPE2\\App_Code\\Service.cs: 行 15\n --- 內部例外狀況堆疊追蹤的結尾 ---"}
挖哩,還是讀取不到~>~<~ 不知道是使用者群組原則是否沒有設定好,但我已經把權限都改成"完全控制"了呀?! 之後也試過了web.config 組態設定,還沒試"註冊表"修改~畢竟如果轉移網站的話,不好意思把別人的系統弄掛吧>< 如果web service 可以叫用額外寫的windows form(APP1),而APP1可以使用SKYPE API進行發送簡訊,這樣也許可以完成。只要APP1的路徑掛在IIS下,但不成為ASP.net的成員。不知道這樣的觀念有沒有錯~ 終於找到了這個想法的實現方式~"遠端物件"~~~~~ 利用.net framwork 提供的 remoting namespace把windows application當作遠端物件使用~ 依然要考慮到使用者群組安全性原則~ 但是..這又是一個大議題..依目前程度要花不少時間來看。 想著這個方法的可行性入睡~~~ 也許有另一個方式會比較間接,但可行性有9成!! 利用資料庫當作媒介,讓WEB SERVICE作寫入,另一隻程式做讀取判斷來執行SKYPE 一樣另外寫一個windows application,這隻程式不斷讀取資料庫作判斷。 這樣一來,windows application是在系統管理者的權限下執行而可以使用SKYPE API 再者,移動網站時,也不需要考慮到路徑的問題,只需要多安裝這個application了~ 但,這畢竟是較低級的方法,application 會不斷使用系統資源,還是使用event觸發的方式較能節省系統資源。
2009年3月24日 星期二
SKYPE API
Skype4COM reference
https://developer.skype.com/Docs/Skype4COMExamples
https://developer.skype.com/Docs/Examples#head-3ff2bc7e3da15010b5c305b7604c85275f971b60CLASS ref
https://developer.skype.com/Docs/Skype4COMLib
Skype4COMLib Version History
https://developer.skype.com/Docs/Skype4COMLib/VersionHistory2009年3月21日 星期六
2009年3月12日 星期四
OpenNetCF` Smart Device Framework(SDF)
很遺憾,.Net Compact Framework類庫對於在Windows Mobile做應用程序開發是很不成熟的,有時候你不得不依賴於會引起諸多問題的Platform Invoke機制。 Smart Device Framework(SDF),一個對.NetCF進行了擴展的功能庫,覆蓋了.Net Compact Framework所未觸及的區域。
.NET Compact Framework使用P/Invoke服务 (二)
Windows Mobile 中开关 WIFI 的“通用”代码
codedll.dll完整函數名稱
HOW TO:在類別庫中尋找 .NET Compact Framework 的支援成員
使用 .NET Compact Framework 進行裝置的程式設計
裝置的 COM 互通性
使用 Unmanaged DLL 函式
要看DLL中有什麼內容,可以使用DumpBin.exe, 如果是ATL COM DLL, 可以使用OLE/COM Object Viewer
求 DLL 入口函数查询工具http://topic.csdn.net/u/20081114/09/def024cb-fb52-4276-bec6-a42cf3c585e5.html
http://topic.csdn.net/u/20080728/20/a5efe62a-629c-4811-add5-bc6c53fcdd5b.html
http://www.pudn.com/login.asp
豐富的搜尋資源
Native Wifi api
WiFiSwitch
使用 Windows Mobile 5.0 中的图片、视频和照相机
使用 .NET Compact Framework 的條碼掃描器
利用連結 iframe 內的錨點作說明頁面
在main.php 有說明列表連結,點選其中一個說明連結,讓Iframe裡的資訊呈現至說明內容的指定項目
main.php
<html>
<body>
<a href="helpinfo.php#說明項目一" target="myIframe">xx1說明</a><br/>
<a href="helpinfo.php#說明項目二" target="myIframe">xx2說明</a><br/>
<iframe name="myIframe" src="helpinfo.php" width="600" height="400"></iframe>
</body>
</html>
helpinfo.php
<html>
<body>
<A NAME="說明項目一"></A>xx1說明<p>
<a NAME="說明項目二">xx2說明</a><p>
</body>
</html>
2009年3月8日 星期日
使用PHP撰寫網頁程式
重複的演算法與功能函式挺多的,以致於現在看到網頁源碼頭都很大><
早知道 就該用物件導向的寫法了~
Object Oriented Programming (OOP) 最重要的概念有三種:
- 封裝 (encapsulation)
- 繼承 (Inheritance)
- 多型 (Polymorphism)
參考這篇,學一下物件導向寫法的基本使用方式吧~
物件導向 類 class
php官網有更詳細的範例說明 The Basics(PHP官網)
開啟/關閉 WIFI 裝置
http://topic.csdn.net/u/20080728/20/a5efe62a-629c-4811-add5-bc6c53fcdd5b.html
解法
Windows Mobile 中开关 WIFI 的“通用”代码
SystemState.WiFiStatePowerOn Property 讀取WIFI狀態的屬性,但無法設置開關
英文的 ><
Deactivate /Activate all Services like (Internet,WIFI,Bluetooth,WLAN..)
Enabling Radio in the Windows Mobile 5.0
WiFi Power On Event
開啟D0 關閉D4
We can implement this functionality with ease. Hope this can give your some idea.
See the code below:
// D0 indicates open; D4 indicates close;
CEDEVICE_POWER_STATE state = D0;
HRESULT hr = SetDevicePower(TEXT(""),POWER_NAME,state);
Note: We use SetDevicePower function here. It sets the device power state for a device.
- 1st parameter: specify the device.
- 2nd parameter: we use POWER_NAME here to indicate that the first parameter is just a device name.
- 3rd parameter: sets the power state.
In order to get information in details, you can find it in MSDN. Thanks!
Regards,
Zero Dai - MSFT
之後
Battery Status
GPS Application
Mobile GPS
2009年3月5日 星期四
在不同執行緒下存取UI控制項(textbox combobox)
解法:
1.Form.CheckForIllegalCrossThreadCalls = False
2.建立委派
3.使用BackgroundWorker
首先在windows.form 的 onload事件建置一條執行緒
compareandprintout = new Thread(new ThreadStart(MRTcompareThread));
compareandprintout.Start();
這條thread 會執行compare()方法,存取UI控制項的程式就寫在裡面(存取textbox,combobox)
public void MRTcompareThread()
{
compare(); //裡面有無限迴圈
}
委派的建立!!
1.建立方法
publik int XXmethod(int a, int b);
2.宣告委派;委派參數,需要與被呼叫的方法一樣,包含回傳型別 (相同 signature)
private delegate void XXDelegate();
private delegate int XXDelegate(int a, int b);
3.引用委派(實體化),後指定方法
XXDelegate d = new XXDelegate(XXMethod); //參考的方法只要名稱就可以了
invoke();
真的開始囉~~
於class form1裡宣告委派
delegate void SetTextCallback(Control ctl,String str); 設置textbox.text
delegate string GetTextCallback(Control ctl); 讀取textbox.text
delegate string GetCBTextCallback(ComboBox ctl, int i); 讀取ComboBox
delegate string GetCBTextCallback(Listcontrol ctl, int i); 讀取ComboBox
另外要寫委派方法
public string gettext(Control ctl)
{
if (this.InvokeRequired) //InvokeRequired required compares the thread ID of the // calling thread to the thread ID of the creating thread. // If these threads are different, it returns true.
{
GetTextCallback d = new GetTextCallback(gettext);
// this.Invoke(d);
string x;
x =(string) this.Invoke(d, new Object[] { ctl });
return x;
}
else
{
return ctl.Text;
}
}
public void settext(Control ctl,String str)
{
if (this.InvokeRequired)
{
SetTextCallback s = new SetTextCallback(settext);
this.Invoke(s, ctl, str );
}
else
{
ctl.Text = str;
}
}
public string getCBtext(ComboBox ctl, int i)
{
if (this.InvokeRequired)
{
string try1 = ctl.GetItemText(i); //i = 1 2 3 4 遞增,奇怪~難道我誤會MSDN? 給出來的是combobox的item索引
string try2 = (string)ctl.Items[i];//
GetCBTextCallback Gcb = new GetCBTextCallback(getCBtext); //建立
string x;
x = (string)this.Invoke(Gcb, ctl, i);
return x;
}
else
{
return (string) ctl.Items[i];
// return ctl.GetItemText(i);
}
}
在非產生UI控制項的副執行緒主程式 compare裡面有
while(true)
{
for (i = 1; i < style="color: rgb(51, 204, 255);"> getCBtext(comboBox1,i) && startstation == true)
//if (nowBox.Text == comboBox1.Items[i].ToString() )
{
//onBox.Text = comboBox1.Items[i].ToString(); //debug會出錯(不同控制項執行緒叫用 ... 我忘了)
string y = getCBtext(comboBox1,i) ;
settext(onBox, y); //叫用方法,自動判斷叫用invoke
}
}
for (i = 1; i < style="color: rgb(255, 0, 0);">// if (onBox.Text == comboBox1.Items[i].ToString())
{
if (goal > getonposition)
{
//nexterrorstop = comboBox1.Items[i - 1].ToString();
nexterrorstop = getCBtext(comboBox1,i-1);
}
else
{
nexterrorstop = "error";
}
}
}
}
VB版
一樣 ,先建立一個拿來更新 UI 的方法( UpdateUI),再建立一個有相同 signature 的委派( UpdateUICallBack)
Private Delegate Sub UpdateUICallBack(ByVal newText As String, ByVal c As Control)
Private Sub UpdateUI(ByVal newText As String, ByVal c As Control)
If Me.InvokeRequired() Then
Dim cb As New UpdateUICallBack(AddressOf UpdateUI)
Me.Invoke(cb, newText, c)
Else
c.Text = newText
End If
End Sub
ref:
舊文重發:Windows 表單與多執行緒
HOW TO:進行對 Windows Form 控制項的安全執行緒呼叫
VB/ VBA/ C#/ Java/ C++ 語言學習筆記
2009年3月4日 星期三
2009年2月23日 星期一
Device Emulator 透過 ActiveSync方式上網

工具->裝置模擬 器管理員

選擇 windows mobile5.0示範
STEP1. 選擇 windows mobile5.0 Pocket PC Emulator右鑑->connect

出現綠色開始鍵,並且跳出模擬器畫面
STEP2. 開啟 Microsoft ActiveSync->檔案->連線設定

允許連線到下列其中一個裝置->選擇DMA(direct memory access)
STEP3. 回到裝置模擬器管理器

右鍵->連結底座(Cradle)
End!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我..真的是太淺了..現在才知道
MSDN原來還有影片教學~~好物啊~
MSDN教學影片