發表文章

目前顯示的是 4月, 2011的文章

Java 中的 long 跟 Long

今天要用到一個class,他的建構子有兩個參數 public C(long Fuck1, Long Fuck2); 於是我呼叫的時候就寫了, C(0,100); 沒想到eclipse一直出現X的提示,看不出來哪裡錯,後來才知道如果他定義是 Long 的話,傳進時就一定要寫 100L。 其實我的例子,傳進參數很多,一直之間不知道是Long的問題,真是Fuck1,喔,我不是再罵髒話,只是提到變數名稱而已~

單單說大陸妹

上禮拜帶單去吃火鍋,夾了一口大陸妹給單單吃 單:大陸妹喔? 我:對啦! 單:長頸鹿的鹿喔? 我:不是啦! 單:… 單:辣妹的妹喔? 我:!!! 接著阿罵再問他:那大哩? 單:大哥的大啦! Orz

Property, field, this, self 的差異, java C# objective-c++

以前在C#, Java 用 this感覺都只是為了讓自動完成視窗跳出來, 但現在在 objective-C++撞到鐵板了。 先來說說property跟field有甚麼差 從C#來看,當你寫成  public int X; 就是field。 但如果寫成 private int _X; public int X{      get{ return _X;}    //getter      set{ _X=value;}    //setter } 就是 property。 就我自己的了解,property只是物件導向中多了一層封裝的用途,但就上面的例子來說封個雕啊?在property裡面完全就沒有限制啊。所以如果是完全沒有限制的情況,我就會直接用field。 C#中的event 跟 delegate 也是封裝的差異 C#讓我覺得好用的原因就是在 setter 跟 getter的使用,如果你要用個property的話,你只要寫 int tmp = C.X; compiler 會自動轉呼叫 X 的 getter。但在java的世界,我很討厭的是他一定要寫成 int tmp=C.getX(); 然後 C# setter 用 C.X = tmp; 比較直接,而java就要變成 C.setX(tmp); 然後奇怪的是Java內建的型別用法也不統一,有的會省略get。 ex: Array.size() or .length()   下面是正題,在 C# 你直接使用 X = tmp (少了this) 的話,他會幫你呼叫他的setter。 但在 objective-c++ 有沒有寫 self 就有差了~ 在.h 裡面我們這樣寫 NSObject *foo; } @property (nonatomic,retain) NSObject *foo; 接著在 .m 裡面寫上 NSObject *tmp=[NSObject new]; NSLog(@"1:tmp %d",[tmp retainCount]);     // 印出1沒問題 //foo=tmp; //self.foo=tmp; NSLog(@"2:tmp %d",[tmp retainCount]);    //如果沒有寫self.的話,就會印1,如果有寫就會

C# 使用 DirectX DirectSound注意

專案中有一個 VolumeMeter的元件,是透過 DirectSound取得麥克風的音量輸入,然後用一個不錯的ProgressBar顯示出來。 最近把專案升級到 .Net 4了,突然跳出下面的錯誤 Mixed mode assembly is built against version 'v1.1.4322' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information. 一開始還以為是 ProgressBar那個元件太舊,於是順便找了一個新的漂亮點的。 結果是Microsoft.DirectX.DirectSound.dll 太舊,透過 VS 的方案總管看Reference,然後屬性視窗裡面的Runtime Version:v1.1.4322。糟的是我還找不到有新版本的 DirectSound.dll,2010 June版 DirectX SDK 也沒有~ 最終解法: 只好直接在app.config裡面加上 <startup useLegacyV2RuntimeActivationPolicy="true">     <supportedRuntime version="v4.0"/>   </startup> 這個在用 sqlite.net 時也都會用到,順便提醒一下,千萬不要用 Sqlite.Net 4的,他的 VS Server Plugin有問題Orz

MDA unbalanced stack C# dll PInvoke signature

  A call to PInvoke function 'cCardControl::getPos' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature. 我的某段程式會噴出上面的Error,當然簡單的可以直接停用MDA,但現在會有不確定的藍白跑出來Orz C 的 prototype 為 typedef int (*GET_POS_FUNC)(long *top, long *left, long *bottom, long *right, long *width, long *height); 我的C# 寫法為 [DllImport(@"xxx.dll", EntryPoint = "getPipPos")] public static extern int getPos(out int Top, out int Left, out int Bottom, out int Right, out int Width, out int Height); 這裡要注意的是 C 在 32 bit 的 long 為 4 byte,所以C#要改用 int,C#的long是 8 byte 的,如果不確定就在 C 那邊使用 sizeof(long) 看一下。 我的程式會出現 unbalanced the stack 的錯誤。可是我另外一個簡單的小程式卻都沒有出現,後來發現是 .Net Framework 版本的問題,小程式是 .Net 2,我的程式是 .Net 4。於是開始搜尋,找到了下面的網頁。 http://msdn.microsoft.com/en-us/library/0htdy0k3.aspx 如果我英文沒看錯的話,他是說.Net 4 才會預設啟用這個 MDA,在 3.5 以下並不

大絕招

清明帶單單去圓山爬山,上去的時候我們走緩緩較長的路,下山時走較短較陡的路。 我:「單單,你走好喔,等下滾下去。」 單:「不會啦。」 我:「你知道滾下去要說甚麼嗎?」 單:「什麼~」 我:「你要說,無~敵~風~火~輪~」