顯示具有 解決 標籤的文章。 顯示所有文章
顯示具有 解決 標籤的文章。 顯示所有文章

2012年11月14日 星期三

extern問題造成的錯誤

今天遇到的情形令人嘔血

a.c 宣告
byte X[8] = {0};

b.c 引用
extern X[] ; 
extern byte X[8] ;

若使用錯誤方式,VC6.0 compiler 過得去,但把值印出來看就會發現錯誤了。
不曉得其他compiler有沒有防此錯誤。

還是完整點寫出來比較妥當。

2011年4月21日 星期四

使用codewarrior 注意點點

compile錯誤描述: reference to lable '233' is out of range

敘述:
在程式碼加上兩行程式碼
cmp.l #40,D0
beq  C_lable1
就發生錯誤..

花了挺多時間還是搞不懂,最後由david回答,特此紀念XD
david said:當發生reference to lable '233' is out of range ,此類無法判斷的錯誤訊息,需注意
1:程式碼寫法
2.前後文友寫跳躍的部份是否異常
結果證明是2,因為前面不遠處有短距跳躍 beq.s 敘述,在其後面加上了上面的兩行程式碼,結果造成距離過長跳躍不到所指向的label !!!!!!

話說,想想之前好像也遇到過一樣的問題,還是打上網誌不會忘記。錯誤描述只能參考用!!!

2010年12月10日 星期五

安裝gcin for fedora 11

系統環境: win xp ,使用VMware 掛載Fedora11

目的是要在KDevelop下能打中文註解

gcin下載地點: http://cle.linux.org.tw/gcin/download/

選擇版本: gcin-1.5.5-liu_mdk.i586.rpm 11-Aug-2010 20:29 1.4M

GNOME桌面環境下,使用FIREFOX下載。

於終端機 CD進入 下載目錄

執行 yum install gcin

開始安裝,執行yes

安裝完成!!!!!!!!! 2010/12/7

Ref:

http://blog.xuite.net/ubuntu/linux/7668046 gcin使用說明

http://cle.linux.org.tw/gcin/download/

2010年7月13日 星期二

VS2005 inline function 反組譯追蹤

開發平台: VC++ , Windows

使用行內涵式時,修飾詞inline會告知編譯器,
每當程式碼呼叫此函式時,就會產生一函式副本來取代該函式呼叫,
以便節省呼叫函式的時間。
也就是說,
程式控制權一直在main()裡面(假設在main中呼叫inline函式),
而非每次呼叫函式時便轉移控制權到該函式。

如何在vs2005平台偵錯模式中觀察這個差異?
在專案->屬性



在屬性視窗中,預設debug mode 的內嵌函式展開屬性為"預設"



要觀察行內涵式的反組譯須把偵錯模式改為release,內嵌行式展開設為"僅_inline"


避免編譯時因最佳化關係自動把函式inline起來



~觀察反組譯~


inline function 程式碼已內嵌

一般函式叫用,可以看到第4行 :0040106B call countcubeVolume1 (401140h)
程式執行至此,會call countcubeVolume1 。


2009年6月10日 星期三

在IE與FF的一些設計限制

PRB: 錯誤設定 table.innerHTML 在 Internet Explorer 中
table 的限制,在不同瀏覽器中的問題較大,需要另外處理~

IE中Table、 thead、tbody的innerHTML屬性是唯讀的!!
若用
document.getElementById("tablename").innerHTML = "XXXXX" ;
IE就會跳出「執行階段錯誤」.... ~~

另外要注意的是 table與 tr標籤元素,不能用innerHTML方式賦值,但.. td標籤是可以的喔!

在IE與FF的一些設計限制(設定css屬性、註冊事件、checkbox)

在FF與其他瀏覽器(不含IE)

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年5月18日 星期一

在IE與其他瀏覽器中動態設定class屬性

有時候需要動態改變元素的class屬性
例如~ 點選完月曆日期連結後,要顯示點選日期的背景顏色~

Firefox中通常使用
var element = document.getElementById("elementID")
element.setAttribute("class","styleClass") ;
就可以了~ 但IE與Firefox中設定的方式有差異喔~

在IE中要用
element.setAttribute("className","styleClass");
因為IE只識別 " className"~

2009年4月9日 星期四

見鬼了 parseInt('08')

今天月曆顯示 8號 9號 應該 要出現連結變色才對~
月曆語法應該沒有問題啊~ 抓蟲結果.. 無解~?!!

alert("parseInt('10') = "+parseInt('10') + " parseInt('09') = "+parseInt('09')+"  parseInt('07') = "+parseInt('07')+"  parseInt('03') = "+parseInt('03'));

alert出來的結果是:
parseInt('10') = 10 parseInt('09') = 0 parseInt('07') = 7 parseInt('03') = 3
怎麼會這樣~

----------------------------------------------------------------------------------
原來啊~~

parseInt
語法
parseInt(numString, [radix])

描述: 轉換型別為string的數字,變成型別為number的數字
參數 :
  • radix為 option,表示"進制";
  • numString有幾個可能性:
  1. 前面部分是'0x' 的字串會被當作16進制,
  2. 如果前面是'0' 的字串則被當作8進制。
  3. 所有其它字符串都被當作是10進制。
  4. 如果前面是無法解析的數字,比如XYZ ,則會顯示 'NaN'。
所以.. 08 09 被當作8進制~才會映出 '0' ~ 怪怪
因此~只要parseInt(numString, 10) 就好了~~

2009年4月1日 星期三

window.jstiming is undefined 網站又掛了~google map?

剛過12點~
刷新地圖就不見了..
FIREFOX 錯誤主控台顯示 window.jstiming is undefined

..怎麼會在這時候發生問題~

google唯一找到的文章... 居然也沒有回覆..

這是錯誤代碼行
s.src=[c?c:"http://csi.gstatic.com/csi","?v=3","&s="+(window.jstiming.sn?window.jstiming.sn:"mfeundefined")+"&action=",a.name,k.length?"&it="+k.join(",")+d:d,"&rt=",i.join(",")].join("");s=j}};var Wr=/[~.,?&_]/g,Xr=f;zk.f=function(a,b,c){this.qm=a.replace(Wr,"-");this.Eg=c||new window.jstiming.Timer(b);window.jstiming.setTimerName(this.Eg,this.qm);this.Jq=1;this.tD=0;this.uf={};this.Jl={};this.Um={};this.iq=""};


都快放棄了才發現...解決辦法~
"http://maps.google.com/maps?file=api&v=2.x&key=abcdef"

改成
"http://maps.google.com/maps?file=api&v=2&key=abcdef"

就如同連結裡說的~2.X版 不穩定~改回第2版即可

2009年3月31日 星期二

php) date 時間日期不對

使用PHP 內建日期函式 date(Y-m-d)
跑出來結果都跟本機時間不同,但在MySql使用其內建date()又沒錯...怪~
原來是php server 問題~ 要設定php.ini 的timezone 為Asia/Taipei

若不改設定檔~可以用下面方式

程式碼中加上
date_default_timezone_set("Asia/Taipei");
預設指定系統時間為台灣就可以了~

or
date('Y-m-d G:i:T', strtotime('+8HOUR') )
指定時間偏移到為台灣時區就可以了~

到右下角小時鐘,點"時區"分頁,就會看到 (GMT+08:00)台北

據說是5.X版後全改成格林威治時間~

2009年3月5日 星期四

在不同執行緒下存取UI控制項(textbox combobox)

問題描述 :在不同執行緒下呼叫方法,方法裡面需要存取主執行緒下的UI控制項

解法:

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); //參考的方法只要名稱就可以了
4.呼叫函數

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年1月22日 星期四

PDA 無法連結至電腦

最近常常出現 連結PDA時,無法連線的問題,通常是在插入別隻PDA後再插入本身的PDA的時候會發生~

解決方法~

2008年11月15日 星期六

測試 string 於 javascript & php

html 的form 經過 POST 或 GET method 傳過來時,只能用PHP網頁接 ..新發現
題外話~~

重點~~~~~~~~~~~~~~
傳過來是
<input name="phonenumer" type="text" value="phone" >
<input name="checknum" type="text" value="chk" >

這個來接收
accept.php

<?php
$phonenumber = $_POST['phonenumer'] ;
$checknum = $_POST['checknum'] ;
$_SESSION['phonenumber']=$_POST['phonenumer'] ;

echo '$phonenumber='.$phonenumber ; //$phonenumber=phone
echo $phonenumber ; //phone
echo "$checknum" ; //chk

?>
<script type="text/javascript">
//<![CDATA[


alert("ffff") ; //ffff
var phonenumber1 ="4536" ;
//表單傳遞資訊存入javascript
alert("<?php echo 'fssfdsfsdf' ?>") ; //fssfdsfsdf
alert("<?php echo "$phonenumber" ?>") ; //0988...
alert('phonenumber1') ; //phonenumber1
alert("phonenumber12") ; //phonenumber12
alert(phonenumber1) ; //phone

var phonenumber = <?php echo "\"$phonenumber\"" ?> ;
alert(phonenumber) //phone
var phonenumber = "<?php echo $phonenumber ?>" ; //存成 phone 字串
alert(phonenumber + '000') // //phone000
var checknum = "<?php echo "$checknum" ?>" ; // 存成 chk 字串
alert(checknum + '000') //chk000

alert("http://140.1xx.xxx.xxx/ixxxx/mxxxl.php?temp="+"&phonenumber="+ phonenumber) ;

// XMLHttpRequest通訊 ;
// function getLonLat(url){
// var request = GXmlHttp.create();
// var theDate = new Date(); //為了避免瀏覽器快取
// request.open("GET","http://140.1xx.xxx.xxx/ixxxx/mxxxl.php?temp="+"&//phonenumber="+ phonenumberr="+ phonenumber , true) ;
//失敗...

var url="http://140.1xx.xxx.xxx/ixxxx/mxxxl.php?temp="+theDate.getDate()+theDate.getMinutes()+theDate.getSeconds()+"&phonenumber="+ phonenumber ;
alert(url); //http://140.1xx.xxx.xxx/ixxxx/mxxxl.php?temp=165349&phonenumber=phone

2008年9月29日 星期一

於vs2005開啟一PDA專案檔

點擊.sln檔案時,跳出一個錯誤視窗

從使用者資料存放區擷取資訊時發生錯誤。找不到平台。

確定後又跳一個 : 無法開啟專案,因為它參考了您的資料存放區中沒有的裝置平台。

這個原因是因為開發這個PDA程式時是在某個平台上的SDK開發的

要怎麼看呢~ 用筆記本開啟.csproj檔, 找到下面幾行敘述

/>
4118C335-430C-497f-BE48-11C3316B135E
5.01

PocketPC 5.01 是 WIndows Mobile 5.0的平台,要安裝相關的SDK,可以到下載中心下載.

http://www.microsoft.com/downloads/details.aspx?FamilyID=83a52af2-f524-4ec5-9155-717cbe5d25ed&DisplayLang=en


2008年6月11日 星期三

php 寫入檔案問題

使用
$handle = fopen("c:/phpsid.txt" , "w+") ;
fwrite($handle , $contents) ;
fclose($handle) ;


出現
Warning: fopen(c:/phpsid.txt) [function.fopen]: failed to open stream: Permission denied in C:\Inetpub\wwwroot\php_pratice_gmapuser\setarea_1.0\setarea.php on line 452
Warning: fwrite(): supplied argument is not a valid stream resource in C:\Inetpub\wwwroot\php_pratice_gmapuser\setarea_1.0\setarea.php on line 453
Warning: fclose(): supplied argument is not a valid stream resource in C:\Inetpub\wwwroot\php_pratice_gmapuser\setarea_1.0\setarea.php on line 454


怪哉~
IIS 主目錄 下: 讀取 、 寫入 指令碼來源存取 都以勾選
使用權限也選擇 指令碼及執行檔

一直無法寫入,不知道哪裡有問題 悶~~
程式碼換成
$handle = fopen("c:/phpsid.txt" , "r") ;
$contents = fread($handle , filesize("phpsid.txt")) ;
fclose($handle) ;

讀取,是可行的~~~

2008年4月21日 星期一

又是防火牆擋PORT (IIS & 防火牆)

晚上中毒後,下載小紅傘 ~最近很夯的德國免費強大防毒軟體
繼續我的網頁製作~問題來了 ~ 居然無法連結我的IIS

又來孤狗一下 ~

參考

防火牆擋住 80 port ... 應該是說 被關掉了..

解決:
開啟 網路連線->點擊區域連線->點擊內容->點擊進階->點擊設定值->點擊進階->點擊設定值->選擇標籤 服務
->打勾網頁伺服器(HTTP)

~END~

2008年4月2日 星期三

IIS & PHP 安裝

NOTE:
為了避免不必要的干擾 進場前請先把防火牆關掉!!

安裝過程需要XP光碟!!




PART I IIS 安裝
控制台->新增移除程式->新增疑除WINDOWS元件->勾選 internet windows service (IIS)


點擊 詳細資料



勾選 World Wide Web Service ->詳細資料



勾選 World Wide Web Service ,沒有特別需要 使用預設選項即可!
<記的放入XP光碟>





下載完後解壓縮在 以建立好的C:\PHP下
將 PHP 檔案解壓縮到 C:\php (解壓縮後此目錄下應是數個檔案夾)

將 php5ts.dll、libmysql.dll、php.ini-dist copy 到 C:\WINDOWS 將已 copy 到 C:\WINDOWS 的 php.ini-dist 更名為 php.ini
幾個步驟:

開啟 php.ini 找到 extension_dir = "./" 改成 extension_dir = "C:\php\ext"

找到 ;extension=php_mbstring.dll 改成 extension=php_mbstring.dll

找到 ;extension=php_mysql.dll 改成 extension=php_mysql.dll

找到 ;extension=php_mysqli.dll 改成 extension=php_mysqli.dll

找到 ;date.timezone = 改成 date.timezone = "Asia/Taipei" 將 php.ini 存檔後關閉

PART III 設定 IIS


為了確保使用IIS 要先設定以下一些東西(各種伺服器安裝PHP的指令不同 install.txt 可以參考)
控制台 > 系統管理工具 > Internet Information Services 本機電腦 > 網站 > 預設的網站 按右鍵選內容




出現右邊視窗
ISAPI 標籤業->新增-> name: PHP -> 瀏覽-> 如圖



確定後 ->主目錄標籤頁->設定->新增-> 在執行檔填入 C:\php\php5isapi.dll (或是按 [瀏覽] 找到這個檔案) 副檔名填入 .php 連按兩次 [確定] 如上圖~




最後步驟 讓連結至網站(http://site)時 Web伺服器會載入http://site/index.php
啟用此功能:
找到 [文件] 按 [新增]輸入 index.php,按 [確定]




按確定

測試:
在C:\Inetpub\wwwroot\下 新增文字檔 寫入
<?php
Phpinfo() ;
?>
存檔 檔名 testphp.php
開啟瀏覽器



有顯示VERSION 即成功
但是卻沒有載入mysqli 模組


解決方法….
法一: 我的電腦->檢視系統資訊->進階 標籤頁->環境變數->系統變數部分 雙點擊Path 加上;C:\WINDOWS 路徑(加在最前面) 這個路徑是以上所存放的ini libmysql 路徑,完成之後 重開機! (通常這步就可以了)
法二
測試 MYSQL語法 可否連到DB
寫一簡單PHP 程式 如下 放入wwwroot裡 ~ 開網頁連自己的IIS


連結成功
再來測試 mysqli 語法是否可行
try 去MYSQL 下載更新的 mysqli.dll 換過從php5X.zip裡面的
…1/1 電腦中毒了….


砍完毒 繼續TRY~


安裝 phpdocument :




關於 php.ini-dist

刪除前面的";"來取消註解

Reference:


碼上學會 PHP5&MySqL5 ISBN 978 986 6884 05 4
附錄A 12-2 row 20


Q&A:


IIS 無法開啟 "為預期的錯誤"

解決方式 : 關掉SKYPE ~ 因為SKYPE會開啟80 PORT ,IIS預設也是80PORT

避免衝突先關掉SKYPE 重啟IIS,再開啟SKYPE即可

PART III 資料庫伺服器安裝 (略)


2008年3月27日 星期四

Dr.eye 7.0 或Dr.eye 6.0 和Office 2007相容性修正(for Windows XP,暫不適用其他平台)

Dr.eye 7.0 或Dr.eye 6.0 和Office 2007同時安裝在作業系統時,同時啟用會造成資源衝突,可安裝此程式修正該問題。
下載 修正程式

檔案大小:1831k

修正步驟:
1. 關閉Dr.eye 7.0 及Office 2007。
2. 執行 All70a02.exe ,依步驟執行修正程式。

其他版本 參考DR.eye官網



2008年3月18日 星期二

session_register 問題

當使用此 session_register() 來註冊一個外部變數時
<?php session_register("user","pw");?>

瀏覽器顯示:
Warning: session_register() [function.session-register]: Cannot send session cache limiter - headers already sent (output started at C:\Inetpub\wwwroot\gm

解決方法:
用&_SESSION['user']="XXX" ; 來取代即可

2008年3月17日 星期一

session start() 問題

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Inetpub\........

當初現此警告時,是說 "在SESSION開始前就有資料送出到使用者端"
所以
解決的辦法就是 把session_start()移到最前面 就OK了

多前面呢?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ~~
的前面!!