這些文章屬於 '程式筆記' 類別

Java 只有傳值,沒有傳址

星期三, 26 12 月, 2007

Java 是否有傳址 (pass by reference)?根據這裡 ,Java 是只有傳值 (Pass by value) 的,最近才搞懂的觀念 

繼續閱讀 »

Javascript && HTML

星期一, 17 12 月, 2007

今天遇到一個情形,所寫的某隻 Javascript 在某些版本的 IE 會沒有辦法正常執行。

繼續閱讀 »

URI scheme is not “file”

星期二, 25 9 月, 2007

Java 下,若要用 File class 來讀取 url 的話。

繼續閱讀 »

C# garbage collection 筆記

星期三, 6 6 月, 2007

最近有點被 C# 的 Garbage collection(GC) 的機制搞得有點昏頭 !!昏頭!! 故查點資料整理一下。

繼續閱讀 »

在 dll 的 Dialog 內嵌個 WebBrowser 元件會有問題.

星期四, 2 11 月, 2006

Case: 在 dll 內包 WebBrowser 元件會造成當掉?

繼續閱讀 »

一個 Makefile 小錯誤

星期五, 14 4 月, 2006

# INCLUDE_THIRDPART = /usr/local/include/xxxx
cvars = -I. -I../../include -L../../libs -I$(INCLUDE_THIRDPART)

.cpp.o:
$(cc) -fPIC $(cdebug) $(linkdebug) $(cflags) $(cvars) $(MYFLAGS) -c $<

一個讓我 trace 有點時間的小錯誤,因為我會改變 Makefile 供其他用,而會 Comment 掉其他程式不會用的變數,比如上面 INCLUDE_THIRDPART 的變數,因而編譯的過程變成下面…

g++ -fPIC -O3 -DLINUX -Wall -L../../libs -I. -I../../include -L../../libs -I -c LibXXX.cpp

而會有類似下面的錯誤訊息,*吐血*
在搞懂是上面問題之前,我一直在想我是在做 lib 啊,怎會缺 main() 哩? 花了一段才找到,時間又這樣過了~~~

/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../crt1.o(.text+0x18): In function `_start’:
../sysdeps/i386/elf/start.S:77: undefined reference to `main’

Takahashi Method 簡報

星期三, 12 4 月, 2006

上星期去參加 OSDC.TW 2006,看到很多人在用一種字很大,然後,說很容易產生上百張投影片,我原本在試 Perl Sporx , 但怎樣試都不太像大家在用的簡報方式,然後在一個講簡報禪 的網站,找到這篇 Takahashi Method ,但這篇好像還是沒有講到用什麼程式。

繼續閱讀 »

OSDC.TW 2006

星期一, 10 4 月, 2006

OSDC.TW 2006  (Open Source Development Conference) 筆記:

這兩天和熊去台北參加 OSDC 的活動,好久好久沒參加類似的活動了,真的沒想到資訊的活動也可以辦得如此讓人愉悅 ^_^ 真的是高手如雲,和他們比起來,我真的是肉腳地很~~ 但也覺得有一群傳奇瘋子在裡面當道

繼續閱讀 »

C++ 筆記:OPERATOR::AND is not an aggregate type

星期三, 22 2 月, 2006
最近在用 enum 時,遇到一個問題,如下:
class A
{
public:
enum OPERATOR
{
AND=0,
OR
};

dosomething(int type=OPERATOR::AND);

}

這段在 VC7.1 編譯得過,但在 gcc 下就不會過了,就會呈現 ‘OPERATOR::AND’ is not an aggregate type 的錯誤訊息了,網路上查一下得知,

Enumerators are names in the same scope where the enumeration type is declared.

所以,必需寫成如下:

class A

{

public:

enum OPERATOR

{

AND=0,

OR

};

dosomething(int type=A::AND);

}

這樣在兩個平台就都可以編譯了,但真是傷腦筋了,我倒覺得 VC7.1 的用法比較 Make Sense 哩!! 比如我想用兩組 enum type,而其中的成員命名一樣? 這要怎樣用?

class A

{

public:

enum OPERATOR

{

DISABLE=0,

ENABLE

};

enum SEARCH

{

DISABLE=0,

EXACT,

LOCAL_OPTIMIZE

};

dosomething(int search_type=A::DISABLE);

}

目前我只知道在 class 外的 enum 宣告,可以用 namespace 的方式來達到此目的,比如

namespace Sense{
enum SenseType
{
Vision, Hearing, Touch, Smell
};
}

就可以用 Sense::Vision 等..

但 class 內? 目前我還不知道,還沒有這個需要 ^_^ 有需要再研究。

C++ 筆記

星期五, 17 2 月, 2006
  • Alarm Clock
    • 在 Solaris 下,有時會出現 “ALARM CLOCK”,然後中斷。
    • 有可能是 usleep() 等造成的? 不太確定。
    • 方法:略去 SIGALRM 的 signal.
      • signal(SIGALRM, SIG_IGN);
  • 在 DLL 內實作 template class 有煩人的 explicit instantiation 的問題…
    • 參考這裡 
    • 另一篇有關 Template 實作的文章: 這裡 ,有一段 the “traditional” way of organizing source code (declarations in *.h files, and definitions in *.cpp files) does not work with templates,所以,我看到的 template 實作似乎都是整個放在 .h 。
    • 結論在 DLL 內實作 template class 有點煩人。
  • 少用 strdup,用 new/delete
    • 這樣常常會有問題 (不知為什麼?)
      • string pSrc;
      • strdup(pTarget, pSrc.c_str());
      • free(pTarget);
    • 改用這樣就沒問題
      • string pSrc;
      • pTarget = new char[pSrc.length()+1];
      • delete []pTarget;

Shared Libraries

星期二, 7 2 月, 2006
最近寫的程式莫名其妙地越來越肥,所以,花時間研究一下 shared libraries.
Under Unix
  • Compile 的方式
    • gcc -fPIC -g -c -Wall a.c
    • gcc -fPIC -g -c -Wall b.c
    • gcc -shared -W1,-soname, libmystuff.so.1 -o libmystuff.so.1.0.1 a.o b.o -lc
      • 在 Solaris 下可能會發生 “relocations remain against allocatable but non-writable sections and relocation error”,加上 -mimpure-text 和 -shared 一起用。
      • -mimpure-text, used in addition to -shared, tells the compiler to not pass -assert pure-text to the linker when linking a shared object.
  • Link 的方式
    • 不要用 LD_LIBRARY_PATH 環境設定的方式,在於用非系統 lib 要用 suid 者,會有安全方面的問題。
    • Link Environment 的設定方式
      • Linux
        • 開發時,以 root 的身分在 /etc/ld.so.conf 加入開發 library 的路徑(比如 /home/derjohng/libs/),執行 ldconfig。
      • Solaris
        • 使用 crle -u -l <lib path>,就會加到 /var/ld/ld.config
    • ln -s libmystuff.so.1.0.1 libmystuff.so (不然,可能會有 error while loading shared libraries 的訊息)
    • gcc -o test test.c -lmystuff
  • 可參考 Program-Library-HOWTO 

Under Windows (VC++)

  • 在要包成 Dll 的程式檔頭 (.h) 加入下述的宣告

#if _DLL
# ifdef DLL_SRC
# define DLL_EXP __declspec(dllexport)
# else
# define DLL_EXP __declspec(dllimport)
# endif
#else
# define DLL_EXP
#endif

  • 在要包成 Dll 的程式檔 (.cpp) 前加入
    • #define DLL_SRC
  • 並將要 export 出去的 function 和 class 加上 export tag.
    • 比如 class DLL_EXP class_name
  • Compile
    • cl -c a.c -Foa.obj
    • cl -c b.c -Fob.obj
    • link /dll /implib:$c.lib -out:c.dll a.obj b.obj
  • Link
    • link c.lib -out:test.exe test.obj

C++ Portable

星期一, 16 1 月, 2006
看完 http://blog.linux.org.tw/~jserv/archives/001436.html  的文章,再看 C++ portability guide  以及 Writing Portable C++  一文,我一直知道在 porting 時會有許多問題要考量,雖然我目前碰的軟體,號稱在 Windows, Linux, Solaris and AIX,都有產品,但我目前能做到Windows 為主就很累哩,而偶而會遇到Linux,就要辛苦去 porting 一陣子,甚至就想說,能勸說不要碰 Solaris/AIX 來解脫就一定要勸說,just say “No” to bad old platforms :p
要寫能 porting 到不同平台的 Code 真的很痛苦,特別是 thread 方面的東西,當然,這是各平台的呈現都有點不一樣,而特別在 Windows 和其他的平台更是不同,很難想像不用 Qt/Mono 之類的人,寫 GUI
方面不知怎樣寫? 用Java 寫 GUI? 好像更難? 我也寫過一陣子 Java(當然 GUI 不會),但還是覺得 C/C++ 寫的習慣 ^_^

C#中調用Windows API

星期四, 15 12 月, 2005
最近要試 C# 去呼叫我原有的 C/C++ Dll API,因為沒寫過 C#,整死我也~~
特別是 wchar_t 要轉成 multi-bytes/utf8 的問題,整理一下,以供備查。
(1) 來自中軟網,主要參考文章 

站內搜尋



本站其他服務

本站其他軟體



  • 油價快訊App (OilPrices)

    依據油價及匯率,估算台灣下週油價,另外提供三週、一年以及三年的歷史變化,以及週末下午推播通知最新油價預估或公告。


  • 照片去背(PhotoEraser)

    一款方便移除背景的工具,產生透明背景圖可以存回原本相簿,也可分享到其他 App 使用.


  • 下一班公車(nextBus)

    這個 app 只要開啟後,就根據定位幫你過濾出附近站牌的時刻表,以及提供相關公車預計到站的時間,方便您在很快時間內確定要坐的哪一班公車


  • 條碼掃描器(QRCode)

    支援 QRCode and Barcodes、可連續快速掃描、自動對焦、可打開手電筒供掃描時使用