none
如何create wm6可以import的DLL use C? RRS feed

  • 問題

  • 各位大大好~
          延續我發問的import dll的問題,延伸出純C開發的dll如何被智慧型裝置使用。目前開發DLL的工程師已經提供我source code,希望我用VS的環境自己去編譯出可用的DLL。我有幾個疑問,我辜狗看到有人說在VS C++中原始檔副檔名為.c就可以開發C code,但是我照做把取得的source code貼上去debug,卻出現一堆錯誤,因為我對開發C與C++不是很熟,所以還麻煩大大門指正使用方法。
          還有我參考了文章去建立ATL Project/Win32 Console Project,希望產生出手機裝置可用的DLL,可是還是無法使用。我看到還有一個專案選項是MFC智慧型裝置DLL,不知道這個能不能符合我的需要呢?
    參考文章:
    http://blog.xuite.net/efchang/network/6193791
    http://www.newzilla.org/2005/01/16/call_dll/
    http://www.newzilla.org/programming/2005/02/16/DLL_2/
    2010年1月29日 上午 07:24

解答

  • 如果是單純使用windows api的方式開發的話,
    應該要選Win32 智慧型裝置專案,並將應用程式類型指定為dll。

    建議你還是問一下開發DLL的工程師是用純API,還是有用到MFC或ATL
    才能選擇正確的專案類型。
    • 已標示為解答 piyolala 2010年2月1日 上午 08:27
    2010年1月29日 上午 09:12
  • 謝謝Zion大大,那位工程師應該是用純API,不過我選了Win32 智慧型裝置專案,加入*.c和*.h後debug會有很多錯誤(例如:error C2143:語法錯誤:遺漏';'(在'型別'之前)、error C2065:'i':未宣告的識別項) ,不過我有檢查過,語法沒有錯。我還需要注意什麼事項呢?謝謝

    補充一下:
    這一篇很有幫助,按照裡面的作法真的可以產生WM6可以用的DLL
    http://social.msdn.microsoft.com/Forums/en/windowsmobiledev/thread/98e60ab6-aecf-4399-a5be-4937ec40aac9
    • 已標示為解答 piyolala 2010年2月1日 上午 08:27
    2010年1月29日 上午 10:06

所有回覆

  • 如果是單純使用windows api的方式開發的話,
    應該要選Win32 智慧型裝置專案,並將應用程式類型指定為dll。

    建議你還是問一下開發DLL的工程師是用純API,還是有用到MFC或ATL
    才能選擇正確的專案類型。
    • 已標示為解答 piyolala 2010年2月1日 上午 08:27
    2010年1月29日 上午 09:12
  • 謝謝Zion大大,那位工程師應該是用純API,不過我選了Win32 智慧型裝置專案,加入*.c和*.h後debug會有很多錯誤(例如:error C2143:語法錯誤:遺漏';'(在'型別'之前)、error C2065:'i':未宣告的識別項) ,不過我有檢查過,語法沒有錯。我還需要注意什麼事項呢?謝謝

    補充一下:
    這一篇很有幫助,按照裡面的作法真的可以產生WM6可以用的DLL
    http://social.msdn.microsoft.com/Forums/en/windowsmobiledev/thread/98e60ab6-aecf-4399-a5be-4937ec40aac9
    • 已標示為解答 piyolala 2010年2月1日 上午 08:27
    2010年1月29日 上午 10:06
  • 貼一段出錯的程式碼吧...
    光看error massage很難猜..囧
    2010年1月29日 上午 11:15
  • 我後來突發奇想,發現只要把變數型態的宣告都放在函式的開頭就不會出錯,可以編譯通過了。這個解法讓我覺得蠻無言的~
    不過DLL編譯出來了,卻遇到使用到相關函式時會跳出錯誤,詳細錯誤列於下方:
    例外錯誤代碼:0xc000005
    例外狀況位址:0x03f9963c
    正在讀取:000000000
    失敗的模組:coredll.dll
    位移:0x0004f63c

    (以下略)

    UPDATE:

    我找到問題,是dll內的一段C code造成crash,目前只能先把問題丟回去給另一個工程師檢查了~
    data[dataindex] = atoi(ctmp);
    	
    while (ctmp != NULL){
       dataindex++;
       ctmp = strtok (NULL, ",");
       data[dataindex] =  atoi(ctmp);
    }

    2010年2月1日 上午 02:06