|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。# Z4 v7 K* s3 z, W9 b3 ?. u6 L4 c
A) s! G) h' p: C& r, ~, @一、使用MSLU的选项
& ]( U* x& o& d- [& v0 Q. g1 [: s+ W4 a. X- O& O. m! F
二、调用unicows.dll失败的处理: `, |& k) B/ Z3 A: J% B
; A$ ^) s% P& j$ b+ Q, j* u9 {+ z7 u三、无法在MSLU上正常工作的函数处理
/ l5 b3 t2 P$ S- R+ \1 s5 u- T, i# q+ b: s% j5 h! T' \4 t
四、对于ON_NOTIFY通知消息的处理。
7 O. H6 [( V, u. ~1 ]3 e8 ?- k
9 ^8 r2 c) Y" r' H! c0 y) b
5 l: p0 E1 Z( |( Y$ \: L! v/ G% g6 J- ~( a4 G4 G( B
一、使用MSLU的选项% {/ k0 `; S" E2 H& P u
1 P" ]# j. I1 \, j" f. ^1 QMFC的静态链接Release版本" r& U! G+ E& I! V) w
* w4 c9 O. z( O5 o5 d, s) nC/C++选项: [* X8 k7 R) p7 }+ z% T4 n
: r( L7 o. Y' _7 q( v6 H去掉_MBCS添加_UNICODE,UNICODE
) ^ I3 n- F \5 z, [# u9 Y2 x* l/ b8 n# \ p: M
Link选项:
* m& ~6 e% p7 r: A6 ?% Z$ `/ a$ L5 M/ n3 g$ s
Output->Entry Point Symbol:/ o5 d; M1 B: C7 { f+ k
0 P8 |6 C8 j% Y% F, L0 H: l- ~, g
wWinMainCRTStartup
8 i" Q8 c y$ m' [
: R8 M. W$ w# T8 P6 Z. {. YObject/Library modules:
- q9 V( q3 ~/ T5 ?& H8 E6 R: z7 U4 `3 v [" q
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 & ~4 B; R M9 Y3 [% \
( P8 b1 c% [1 N8 }+ o' Q# m. ?5 EMFC的静态链接调试版本:
. G" x4 @# e4 L2 a+ a, d
" B: e& O: Q, D1 Y- s% Aunicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
9 X* j7 P, ]9 s5 c$ F( ~: _6 D0 o f/ {9 e6 h Y- V
二、调用unicows.dll失败的处理
. x' ^( \- ]% ]( C9 B% z4 X. K# w2 p
当WIN98下无法加载unicows.dll时注册以下函数进行通知。8 D5 N* b% p. F, w( U7 Y6 _' p' H
/ W* q/ @/ Z1 G" X% B @' w' `3 y8 VHMODULE LoadUnicowsProc(void)3 v. p. j/ t- _- ^$ |7 r
{
# Y8 Y2 p7 a' L. y# x- eHMODULE hMod = LoadLibraryA("Unicows.dll");
0 A! I# ?7 e2 t, y0 d$ i- K( vif (hMod == 0)
& V( C( |( d1 ]" e6 V/ k. c{
' K- T/ w& u7 I. V% G! s MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
* J" Z& y8 S t4 O3 V7 c "MWP",MB_ICONSTOP|MB_OK);2 y: {! ?: [+ Y
_exit(-1);* P/ Q$ k. {$ d/ h' Z
}
8 x* `* k% T3 \! y- x0 h4 Creturn (hMod);
7 d& |9 s7 J6 a}9 k! c# `0 N5 @2 w- ?$ B
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;- b. g' K/ _/ W* A( K& R
5 e( c8 @' H i; v! m% @; P
三、无法在MSLU上正常工作的函数处理9 _! n8 c( {$ R( q0 A7 k
) b F @1 }. ~. c9 q3 l) L
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。. H8 e& J/ I$ [' y- B
- _. f- W6 E- Y4 I* N5 o例如mmioOpen8 s2 w; {" k4 g8 s3 d9 q
/ F, @: Q* v0 i3 _4 N
#ifdef _UNICODE
6 J4 ~+ w* s, P, Oif (IsWin98())
3 ]7 \' m+ S# w) N$ h" y{3 `8 E* T. ]# V8 t& z7 n6 }/ i
USES_CONVERSION;
2 b1 r& X$ a7 H( T4 t0 { if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
9 T2 @$ n; N! F {
# d( b. D3 ` n; Y' `7 J AfxMessageBox(IDS_ERR_OPENWAVEFILE);
5 c) \6 q+ Y" W0 C return FALSE;
/ _6 C0 k/ N. U' r. X& W& U }
* L" q) ]+ q2 h}1 i# C7 x; D7 o" v+ L( B; w$ r/ _
else & E- v' ~1 h" v
{( B; W+ a% s" V+ a- y" |( k
if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
$ b6 c; M Z/ } {
1 E7 d/ a& u% E) j7 ?2 c# [ AfxMessageBox(IDS_ERR_OPENWAVEFILE);
1 G& b5 |& L3 h# H( ~ return FALSE;
! H0 U0 N$ Y; Y& ]. a }+ K" {( K) X( g" y
}
9 k& t/ }8 [/ K% K0 A# E#else+ a& [. b( {6 R6 f s+ Q+ q
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
1 P+ A2 o! R/ y{+ U$ w( Y0 I/ H+ P3 K
AfxMessageBox(IDS_ERR_OPENWAVEFILE);! p w8 p7 g0 d, U( `8 g: }
return FALSE;
9 n# O7 ~; Y8 S: i6 n4 H3 ^}6 @% K* D/ z4 x) p- x+ J% P# [
#endif
2 h% g$ v N3 J/ u" v# h' g+ a0 a3 ]- u6 D
四、对于ON_NOTIFY通知消息的处理。
6 D c- B0 Y g& @( d9 f1 n; \7 ^. v! ]. c% b, b
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
6 b* R1 T; T4 Y% b3 F( K% W. u! T' y4 M2 m4 f# b1 w8 F* u4 }
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)- P' c, K4 @; W. e9 b
{+ _5 L: o# G z+ n' c
改为. s$ R& ]/ c! k4 j3 c- `
" u- G3 W0 I9 uON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
& K9 ~+ ^- C7 r. MON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)/ n: H! N, j( u7 @7 A
7 u1 r& D l3 D q( u
这样可以在WIN98/2K下正常工作。 |
|