|
|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
M! b4 G! z. a1 U+ _& U/ g6 _5 y3 L& p g, a2 T
一、使用MSLU的选项
$ O5 c& I+ N$ k& \8 P$ W; u, B6 \
二、调用unicows.dll失败的处理
, [5 ~& T6 W9 ?1 L/ V+ ?! q- r' T, Q7 M4 e9 ]9 ^! b$ Z
三、无法在MSLU上正常工作的函数处理, c' Y8 b( b4 {" @$ l( ^
9 t; y2 q9 N; O9 \
四、对于ON_NOTIFY通知消息的处理。+ g" ~: _ r: @
$ ]% Y* B, h0 Z; t
$ I% _6 i: u* o8 Q& _* d# [% b8 R+ s6 C
一、使用MSLU的选项
$ S& w3 R% f- U6 F X! U2 ]5 ?
' v! K% g/ g" ]9 e# O" ]3 @MFC的静态链接Release版本
$ _& `9 d9 U" r# p
% p/ a1 w& h7 k$ j+ C5 [$ z& pC/C++选项:7 c0 ~# \& ]& W- r
* x6 \; H. v( n3 p& l1 X! A7 J
去掉_MBCS添加_UNICODE,UNICODE
2 w1 g' O. E) q2 o1 x3 V5 `5 D P' H+ [: z) h+ b0 n0 H. ~
Link选项:
7 _' s" C5 @; B# f& w/ k5 ]
! Z; P [ s$ x, M- U) `Output->Entry Point Symbol:. w) W: F0 U9 B y
# I G$ D, @# {& O5 x. w$ {( ^: B* mwWinMainCRTStartup$ s& ~, | Q3 w4 r- _" k3 P
; c f' C4 t$ k+ _% X
Object/Library modules:
. v1 d O* O O3 m7 n# ]8 g) N4 y- r! _/ J: d7 E. C
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
* i3 L* \8 F2 E& M
- m: P% E0 j- h0 ^6 ]$ C; T- A, SMFC的静态链接调试版本:0 Q" G B2 P3 M9 a1 E! j* m
7 E! n( W: e" M6 funicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
( {5 `( W { U/ l# ]2 L. }
( ^8 x( f+ v& p$ X5 L/ y二、调用unicows.dll失败的处理
& Z+ t- v1 |! L1 _2 Z1 T9 `3 D$ |
) f0 R- M" `! t当WIN98下无法加载unicows.dll时注册以下函数进行通知。9 I, c+ K' F# s0 f7 g$ p3 p
# A2 E% E+ ^+ l$ `9 JHMODULE LoadUnicowsProc(void)
9 _* Y% Y# P8 X* L) n7 g3 i0 K6 J{
: H% h8 j# m8 ^: F/ i% DHMODULE hMod = LoadLibraryA("Unicows.dll");
) R8 \4 h5 D6 }% z: w1 Nif (hMod == 0)
2 U2 W+ h4 J' n9 T8 O$ k9 k{; F8 X- P. |7 |% ?! w) j* q2 J& S- T
MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
9 d: s- i: y1 I/ P D "MWP",MB_ICONSTOP|MB_OK);- S/ D$ Y7 U- k
_exit(-1);5 I: D* F6 N- j1 A3 J+ |& X1 Q
}
; h3 C; J" j& creturn (hMod);
) i0 \+ I3 v6 F; x}$ P0 H+ K7 [5 P" O" \1 E
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;7 m/ \5 W( h8 u. t `* v; ^
1 f4 D3 \* W1 P/ X# o' }7 H
三、无法在MSLU上正常工作的函数处理
4 {6 I) I! G/ }5 v$ t" z& G$ C. \& o) Z6 o" E. x2 q# Q+ O
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
/ [9 g8 D2 c) @: O3 V
0 j; V' K& v; d2 e例如mmioOpen) |; R' e m) Y! t* m0 f/ v
4 o6 o- {9 D6 D' }6 I#ifdef _UNICODE
( D$ ~; E: T7 oif (IsWin98())
|3 T- [! [/ Y{/ F/ S6 I3 ~5 a) S
USES_CONVERSION;
- m) X: N$ `4 }4 ]$ L if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
% B* e ?0 [2 v) Z. Q {
+ [) e% q a& \+ B+ Q8 z: d( P$ A/ C AfxMessageBox(IDS_ERR_OPENWAVEFILE);
g+ Y+ H- g" a- D ] return FALSE;
4 T [+ R& g* U& l- l }
( _9 Q8 W- x4 @4 N, _1 m- N# w}
$ a3 C! x+ O; L) q; W; E0 e# I2 Jelse
7 q3 W$ s% o* |4 U% G/ Z/ t- L{4 l+ Q7 F- e6 ?
if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
6 q. @. \- d4 w/ Q1 H {) r0 j2 W, z" B
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
& j! _/ b7 }1 ]8 G# p6 c return FALSE;
" S$ S4 e5 J# W' } }( @% u4 w" i1 A6 r, J; e. Q
}
4 o4 |$ B; A/ q9 L2 e+ M* r#else0 v7 L/ Q9 t( C/ E% A
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
5 _; {/ V; Z6 q! M( L* {{
9 i4 M4 c% X% j AfxMessageBox(IDS_ERR_OPENWAVEFILE);- j" K: D# r$ A* z' `+ l; t
return FALSE;
1 G, ?* y" `+ i" |}: K0 g# R0 `( |$ f
#endif% y% k! x; p, v& W
- o- s$ { v% X7 x' a8 C四、对于ON_NOTIFY通知消息的处理。3 K' i3 L9 x6 d' J
/ T7 f7 |" G4 p$ D, E; L6 G8 J
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:/ V1 c" z: g; g4 s
, e+ @/ i0 |$ f% I- E) w* q
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)2 X6 a8 d z5 z# D
$ d) X9 ]. Z( T
改为
2 Z7 ^2 |) a* j8 g1 Y
" _$ i3 k9 }* q/ i. a" ^3 ]% S) P, vON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
* m7 K* [3 p! _' y2 p4 uON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
9 c$ o3 r9 D& l y) W
6 ~ E- e: l! Y3 U [" h, X这样可以在WIN98/2K下正常工作。 |
|