天天看點

關于在Windows Mobile下今日插件使用WTL的問題簡介問題解決

本文講述在今日插件開發中整合WTL遇到的問題,問題已經解決,看解決部分。

最近一段時間都在開發今日插件(Today Plug-in)。開始把代碼都寫的差不多了,整合了Sqlite和WTL,關于Sqlite和WTL也可以參考之前寫的文章。

<a target="_blank" href="http://www.cnblogs.com/procoder/archive/2009/10/19/1585733.html">Windows Mobile下通路Sqlite的Native C++封裝</a>

<a href="http://www.cnblogs.com/procoder/archive/2009/06/03/1495002.html" target="_blank">Windows Mobile和Wince下的WTL(Windows Template Library)開發</a>

最後測試的時候發現今日插件沒有正确顯示出來。

一般來說一個部署成功的今日插件可以在配置裡面顯示。如下圖:

Start-&gt;Settings-&gt;Today-&gt;Items

關于在Windows Mobile下今日插件使用WTL的問題簡介問題解決

我的插件名字叫做Jake’s Today。

但是一旦我整合了WTL,插件就不能顯示到Today Setting裡面了。

<a target="_blank" href="http://11011.net/software/vspaste"></a>

在StdAfx.h加入WTL的頭檔案,如果僅僅加入ATL支援,是沒有問題的,但是一旦加入#include &lt;atlapp.h&gt; 後今日插件就不能顯示到Today Setting裡面了。如下圖:

關于在Windows Mobile下今日插件使用WTL的問題簡介問題解決

今日插件Jake’s Today消失了。

我使用Dumpbin檢視接口,發現接口與是否整合WTL無關。

這個問題我查找了MSDN沒有找到答案,發貼提問了也沒有人回答。

<a target="_blank" href="http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesnative/thread/12520632-fa45-4281-9f9b-f137edb2011b/">How to use WTL in today plug-in DLL</a>

由于工期原因,我決定放棄原先的方案,直接使用Win32來完成這個今日插件。如果那位碰到并解決這個問題,請告知,在此先謝了。

PS:可能有曲線救國的方法,使用一個today host來調用DLL,因為這個host可以調用C#的DLL的,參考下面的連結。

<a target="_blank" href="http://msdn.microsoft.com/library/ms839442.aspx">Creating a Pocket PC Today Screen Plug-in with the .NET Compact Framework</a>

<a href="http://www.christec.co.nz/blog/archives/279" target="_blank">Creating Managed Today Screen Items</a>

 經過Ray和UMU的幫助,找到了解決方法。問題是如果編譯出來的DLL依賴于msvcr90d.dll的話,加載就失敗了,我想可能是shell32不能成功加載msvcr90d.dll導緻的。

下面使用 Dumpbin /imports win32.dll 檢視沒有使用WTL的版本的DLL。

Dump of file win32.dll

File Type: DLL

  Section contains the following imports:

    AYGSHELL.dll

              10010000 Import Address Table

              1000F3C0 Import Name Table

                     0 time date stamp

                     0 Index of first forwarder reference

                      Ordinal    40

                      Ordinal    56

    COREDLL.dll

              1001000C Import Address Table

              1000F3CC Import Name Table

                      Ordinal   725

                      Ordinal   884

                      Ordinal   874

                      Ordinal   873

                      Ordinal   730

                      Ordinal   263

                      Ordinal   916

                      Ordinal   262

                      Ordinal  2005

                      Ordinal   264

                      Ordinal   858

                      Ordinal   875

                      Ordinal    95

                      Ordinal   919

                      Ordinal  1047

                      Ordinal   267

                      Ordinal   266

                      Ordinal   258

                      Ordinal   246

                      Ordinal   691

                      Ordinal   868

                      Ordinal   692

                      Ordinal   684

                      Ordinal   497

                      Ordinal   876

                      Ordinal   250

                      Ordinal   261

                      Ordinal   911

                      Ordinal   903

                      Ordinal   921

                      Ordinal   910

                      Ordinal   260

                      Ordinal   248

                      Ordinal   945

                      Ordinal   923

                      Ordinal   924

                      Ordinal   935

                      Ordinal    90

                      Ordinal   912

                      Ordinal   897

                      Ordinal    63

                      Ordinal   931

                      Ordinal   895

                      Ordinal   918

                      Ordinal  2033

                      Ordinal  2027

                      Ordinal  2048

                      Ordinal  2053

                      Ordinal  2024

                      Ordinal  2046

                      Ordinal  1118

                      Ordinal  1122

                      Ordinal  1116

                      Ordinal  1113

                      Ordinal  1097

                      Ordinal  1025

                      Ordinal    23

                      Ordinal  1068

                      Ordinal  1094

                      Ordinal  2008

                      Ordinal  1551

                      Ordinal  1044

                      Ordinal  1095

                      Ordinal  1580

                      Ordinal  1572

                      Ordinal  1571

                      Ordinal  1575

                      Ordinal  1574

                      Ordinal  1065

                      Ordinal    87

                      Ordinal  1556

                      Ordinal  1046

                      Ordinal  1041

                      Ordinal  1018

                      Ordinal  1096

                      Ordinal   537

                      Ordinal    16

                      Ordinal    33

                      Ordinal    15

                      Ordinal  1492

                      Ordinal   520

                      Ordinal     3

                      Ordinal     4

                      Ordinal     5

                      Ordinal    11

                      Ordinal   171

                      Ordinal    75

                      Ordinal  1132

                      Ordinal   541

                      Ordinal    10

                      Ordinal   530

                      Ordinal   528

                      Ordinal   543

                      Ordinal   517

                      Ordinal     2

                      Ordinal   544

                      Ordinal  1876

                      Ordinal    36

                      Ordinal  1875

                      Ordinal  1570

                      Ordinal  1111

                      Ordinal  1100

                      Ordinal   496

                      Ordinal    12

                      Ordinal    34

                      Ordinal    35

  Summary

        1000 .data

        1000 .pdata

        3000 .rdata

        1000 .reloc

        D000 .rsrc

        C000 .text

下面使用        Dumpbin /imports wtl.dll 檢視沒有整合WTL的版本的DLL。

Dump of file wtl.dll

              1001A000 Import Address Table

              10019AA8 Import Name Table

              1001A00C Import Address Table

              10019AB4 Import Name Table

                      Ordinal  1177

                      Ordinal   553

                      Ordinal  1496

                      Ordinal   494

                      Ordinal    61

                      Ordinal   524

                      Ordinal   550

                      Ordinal  1043

                      Ordinal   542

                      Ordinal   549

                      Ordinal   516

                      Ordinal   548

                      Ordinal   230

                      Ordinal  1054

    msvcr90d.dll

              1001A1F0 Import Address Table

              10019C98 Import Name Table

                   26 wcsncpy_s

    ole32.dll

              1001A1F8 Import Address Table

              10019CA0 Import Name Table

                   1E ReadClassStm

                    3 CoCreateInstance

                   28 WriteClassStm

        5000 .rdata

        2000 .reloc

       14000 .text

發現WTL版本比Win32版本增加了對msvcr90d.dll和ole32.dll的依賴。

如果要去掉這些依賴可以通過編譯Release版本來解決。    

    本文轉自Jake Lin部落格園部落格,原文連結:http://www.cnblogs.com/procoder/archive/2009/10/28/Today_Plugin_WTL.html,如需轉載請自行聯系原作者