|
|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。8 v4 T* y- y4 ~1 \8 _) I2 o
' X2 J4 H5 E1 |3 O+ V3 S+ \+ m
一、使用MSLU的选项) ?! ]% D2 c1 B# R8 a
% t- A+ W! l; l, ?2 d二、调用unicows.dll失败的处理
: u2 h; T- m3 |3 ~) c4 E. ] Q2 @- U. G$ @! o$ ^" v, [+ b1 s
三、无法在MSLU上正常工作的函数处理, Z6 N( D* V0 V% |: Z. v6 i* t8 }
Q/ k0 t( b+ N* I" M$ {四、对于ON_NOTIFY通知消息的处理。
6 C$ {* F0 _; k( Q: T" s/ ?1 t$ o; v4 |' U# M- x B6 F+ U
) _2 K2 r, e: _+ y, r: \3 X6 j# f2 T- v
一、使用MSLU的选项8 K, J, m7 {" ~
/ g$ X* K* p* e6 K9 F* _4 IMFC的静态链接Release版本7 K. F8 A. {3 e
" A6 a1 [6 M: k& G. q |
C/C++选项:
& [ z2 _" K- @; y( e R! t$ ?. @" `- v7 C3 t) h& g& G
去掉_MBCS添加_UNICODE,UNICODE
" u, }. _# N r) m" k0 l( }8 u/ z# L B7 p
Link选项:4 ?2 M3 t+ }/ u" a% K9 q
7 f& v V9 {% F+ P& O2 J* S
Output->Entry Point Symbol:& h9 r) ^* Q! @1 r
; E X3 H5 [. g0 O) S) `
wWinMainCRTStartup- u( B& G8 _3 R6 C0 c' S4 T
, e% D. A, ?5 P, p2 Q' b' }+ o
Object/Library modules:
$ q5 @2 r' l4 `3 P+ N# J3 }* V% j9 E6 O! O
unicows.lib kernel32.lib advapi32.lib user32.lib gdi32.lib shell32.lib comdlg32.lib version.lib mpr.lib rasapi32.lib winmm.lib winspool.lib vfw32.lib oleacc.lib oledlg.lib uafxcw.lib libcmt.lib
2 j2 }2 x* M2 n! D4 D" i7 ~) U
$ P X5 e) [4 i$ qMFC的静态链接调试版本:, }0 o3 }1 P# `8 k
3 a' W" c0 A, o& o" N
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
, m* _0 Z% X9 W, ^0 S8 S
. A# u- W0 n* n/ I二、调用unicows.dll失败的处理- v0 D. E: \# n
' c2 w, z- X0 X# @
当WIN98下无法加载unicows.dll时注册以下函数进行通知。5 J5 H+ ?6 _/ {$ W9 K8 o
7 \7 p' u0 z- {; T. Y8 P2 `& u$ m$ sHMODULE LoadUnicowsProc(void)8 t, r" w& n0 D; N' E0 |. b
{
* @5 f3 O5 [0 |1 @, X# E% IHMODULE hMod = LoadLibraryA("Unicows.dll");: F4 o( a S# L$ m. v
if (hMod == 0)
4 u2 t+ z' w6 _, w5 w+ S9 M{- J$ k, Q/ v1 S" k$ h6 g/ o+ o9 p
MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",& D" ~7 k5 a0 ]$ X2 l
"MWP",MB_ICONSTOP|MB_OK);" C; q; R# W: |6 x& d0 a- }& S
_exit(-1);
' l q/ ~1 t# a( b. W}
i% i0 w0 o+ E( Q; @* areturn (hMod);$ z# E& n& c7 _
}
* n& K& c# C$ n7 E7 dextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
# v0 o6 V: I' T K
3 j/ E# ~5 x! a# y% E: @9 d三、无法在MSLU上正常工作的函数处理8 _2 c2 j5 N( s- J* Y
' X/ B' m# v" I1 m
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。" t7 k2 c; O/ R" ?! }- t' z d
( E2 n6 F' I7 R. g1 N例如mmioOpen
* i& j. d( l' W9 U; w: q3 [: [( k* \. I$ V' Q
#ifdef _UNICODE8 n1 ^# ]5 N- i6 M
if (IsWin98()): G# `& l3 b3 c# w
{
# M& c, U8 F7 Z2 w USES_CONVERSION;
! G$ P: _1 B/ W9 q8 j( H% P! t if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))6 v/ |0 r# R0 b6 {
{; @# m" q1 t9 c9 X3 J8 K1 z7 O. z
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
0 @7 ~4 l6 y3 T return FALSE;
* v1 w9 p* }1 ~* k }% G; C0 t- k4 o0 a5 O( o
}$ m- Y9 z, X; C
else & \, V! j- h# ?
{
5 l/ b" E6 a) _ if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))! d8 d1 I6 A$ ]( ^! g
{
4 T& Y5 p6 u" D' d6 Z+ | AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; I5 |! `; f1 b* v# r9 l return FALSE;& H: n" o/ G! V+ ] d+ _5 x% W) o4 _2 K
}; V7 A) L( B$ C% m4 [* ?; g
}
: Q2 A5 ]/ S! ~# ^# H; m P2 j#else
" X0 {3 Q) l2 H/ z( Oif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))5 t4 ~8 V$ E x& |6 X: \; X
{; `5 J& n( V$ q6 v& I0 D! X
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
4 ~- x: v& I' r { return FALSE;
+ ^7 @ V1 a+ {' ~* X7 U3 i; g A7 L}8 G2 T, O5 x( x, @ h K4 R* n
#endif
5 v w' g; J B, m A9 u* A6 n3 @
2 k5 P/ [ H4 }0 s) }" L W6 R四、对于ON_NOTIFY通知消息的处理。) w4 F9 l$ s5 s
7 K: ?6 j6 B7 v& C对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
f: ^: m7 |! I) t9 R. h1 P) R. K- @3 T
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)6 h- \9 m' C) M) \+ }9 m
, O: @8 @% u; R/ c
改为8 Q! F1 y$ m4 P$ Y) F" B* H
& O. \3 P$ j: I' T; {ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree): | I' Z$ k6 W8 m* g* H
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)" x w; @8 M6 Q
# @' B* i6 u# w- X8 X; E5 {6 J这样可以在WIN98/2K下正常工作。 |
|