發表文章

目前顯示的是 3月, 2008的文章

Solution: MFC and fatal error C1189

圖片
今天用Visual Studio 2005開一個空白專案,撰寫一個MFC的程式,遭遇了fatal error C1189 錯誤訊息前略... include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d] 解決方式 調整專案的屬性,將MFC的DLL設定到位 1. 對著專案按右鍵→「屬性」 2. 「組態屬性」.「一般」.「MFC的使用」選擇「使用MFC的共用DLL」或是靜態MFC函式庫

設定Dev-C++的引入標頭檔*.h與函式庫*.lib

圖片
若你的程式是開專案的,可以設定專案的選項,可以從「專案(P)」→「專案選項」開啟專案選項,或是直接按下Alt+p開啟,在「檔案/目錄」的分頁中,即可設定要引入的標頭檔。 若是沒有,只好設定編譯器選項,但是這可能會為你的其他程式帶來一些困擾。從工具列「工具(T)」→「編譯器選項(C)」可以開啟編譯器選項,在「目錄」中即可設定。 不過有時候並不是設定引入檔的問題,而是要開啟某些編譯器選項,例如:在Dev-C++與VC++中 使用Winsock時 ,必須加入連結選項。

VC++:設定IDE永久的include的header目錄與link的lib目錄

圖片
在 Java:Create .DLL file in VC++ for JNI 的「3. VC++2005的設定」中,引入JNI標頭檔所使用的設定方法,是專案性的設定方式,當你開啟新的專案後,這些設定就不會存在。 若要使編譯環境永遠Include某些標頭檔,或是在Link時加入lib檔一起編譯,就需要設定IDE的選項,將這些設定保留在IDE中,往後開新的專案也都會附帶這些設定。 要設定VC++2005的永久選項,在工具列的「工具(T)」→「選項(0)」中 在左邊的樹狀圖'專案和方案'中,點選'VC++目錄'來設定這些目錄 Include的header目錄 Link的lib目錄 需要設定成為永久性的選項,往往都是程式撰寫者本身所匯聚的的函式庫,可能是自己寫的,也可能是其他人所撰寫的,總而言之,這些函式庫通常就是設計師的手腳。

Java:Create .DLL file in VC++ for JNI

圖片
這篇將指引該如何從Java開始,到利用Visual C++ 2005,建立JNI使用的DLL動態連結函式庫。 首先,要先寫好一個使用JNI的Java程式,這裡以JniExample.java作為範例,程式碼如下。 1. 由java撰寫開始 public class JniExample {   // 主程式   public static void main(String[] args) {     JavaClassWithNativeMethod j =         new JavaClassWithNativeMethod( );     String[] strs = new String[]{"apple","banana","class"};     // 呼叫原生方法     boolean b = j.useNativeMethod(strs);     if (b == true)       System.out.println("Java:All ok, return true.");     else       System.out.println("Java:Somthing wrong, return false.");   } } class JavaClassWithNativeMethod {   // 載入所使用的DLL檔案   static {     System.loadLibrary("MyDLL");     System.out.println("Java:Loading dll is compelete.");   }   public JavaClassWithNativeMethod() {     System.out.println("Java:A new instance created");   }   // 使用JNI的Method,具有native修飾子並且Method為空   public native boolean useNativeMethod(String[] println); } 接著

Solution:how to print wchar_t in C/C++?

該如何印出wchar_t的字串? C 方法 wchar_t* foo = L"two bytes each character"; wprintf(L"foo =[%ls]\n", foo); 函式定義在 wchar.h 中 。需要注意的是,使用的format參數形式,由印出寬字元格式參數由%s改為%ls了,雖然你可能用%s還是會把寬字元印的出來,但是寫code還是嚴謹一點好。 C++的方法 std:: wstring foo(L"two bytes each character"); std::wcout &lt&lt "foo =[" &lt&lt foo &lt&lt L']' &lt&lt std::endl; Dev-C++沒辦法用wcout,因為Dev-C++所使用的MinGW編譯器 尚未完全 將gcc對寬字元支援的功能port到Windows上;不過在C++中,理所當然的,你也可以使用C的方法。 此外在VC++上使用wcout,要設定locale,才不會印不出字元,關於這個問題,曾出現在 Java World@TW 中。 如果你有嘗試看看中文的wchar_t宣告,將會發現沒辦法使用中文 ,如:wchar_t* foo = L"我是寬字元";, 編譯時會產生錯誤,以gcc錯誤訊息來說,是'Illegal byte sequence',我們只能利用比較抽象的Literal方式,即每個中文字的所代表的byte數值,或是利用mbstowcs函式將 以char陣列宣告的 中文字串,轉換為wchar_t的字元陣列。 參考資料 Thinking more...用 wprintf 輸出 string - 樂多日誌 Re: How to print out a wide character string from a C/C++ program? MSDN:wstring (Standard C++ Library) Formatted Output Functions - The GNU C Library 延伸閱讀 G11N De