|
|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
# z: P$ W. L8 k. |' {% _0 f4 S g8 w1 W
一、使用MSLU的选项4 Q* X- _3 J v$ M. D
) d) j6 s8 A; o. C9 b" K! A
二、调用unicows.dll失败的处理
# ~; E6 a& T# l& W: f4 z6 ?% }
( H# J6 w. h9 o, l三、无法在MSLU上正常工作的函数处理4 e' t; {. R9 _. b
! }8 P+ a2 N- q' E% k! N8 A四、对于ON_NOTIFY通知消息的处理。1 m- W3 I! ?4 }0 `
- }6 v* x3 l7 S/ u
7 g2 |. J1 V' ~& f' i3 t( E6 r/ D+ p% c8 h. S2 K
一、使用MSLU的选项
0 Q- ^# a, D3 n+ G _9 B
( b6 b7 C: ?6 y0 q* Y5 g mMFC的静态链接Release版本
' z* W$ b0 N# t
' G1 U' I, t) S' f2 ?C/C++选项:
2 V8 w" L: Z) T& o* e+ W% l* r, x/ [" ~+ i6 e) q$ z
去掉_MBCS添加_UNICODE,UNICODE
6 U9 n/ ]4 `9 Z% t. b. J8 p' M
Link选项:" Y, q! d, U6 G) }) f& M8 C
& y2 o! Q2 i, W' ~Output->Entry Point Symbol:
E6 A5 v, ~. G, Z, c( N
" z; w. r# A hwWinMainCRTStartup
2 W& z. I, n! x0 t( Z% Q' v# ?0 T& ^; B5 @
Object/Library modules:
, P; p4 I! _. r' x/ @$ J" x, k8 I! L3 M" V# } s! b, J
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
B7 f [" B$ d6 Y' d
' V. u2 [" @3 H: AMFC的静态链接调试版本:" e! L% S, u: _
5 i; w6 [1 |6 C- v- _8 b2 p* H3 T
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib * h4 ~& W. ^7 ^4 f7 z
6 H5 l/ \' W/ D
二、调用unicows.dll失败的处理
2 U- `1 a* E$ o6 W ^4 q- I* m
+ X1 K" P$ g& _当WIN98下无法加载unicows.dll时注册以下函数进行通知。
4 ~) r2 C+ V- Y8 o8 D0 C% [% b( H9 H6 Q5 f
HMODULE LoadUnicowsProc(void)
6 K6 k0 A4 ]4 R4 m6 [{* ` M" m4 m4 k" \) }: N" f
HMODULE hMod = LoadLibraryA("Unicows.dll");
4 `& M; P1 o5 c$ N; c5 n5 x* vif (hMod == 0)
3 M1 j1 z5 U2 A3 w- F+ Q: |{/ B' _" V& E: ?
MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
/ f @! T. t4 g: j2 ~0 B "MWP",MB_ICONSTOP|MB_OK);9 ^: N. L. F0 u2 o
_exit(-1);
. g. `6 v- r0 K}1 e, c# |' u/ i# G( n# R
return (hMod);
$ a+ u3 R6 z7 c1 l" D}$ j# R* F Q# g6 }
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;; w7 H% Y6 k4 R7 r7 ~/ Z' M5 s3 b
x) n' R6 s. x; k2 o- k9 V
三、无法在MSLU上正常工作的函数处理" |; j. b/ X C- G
$ U# [6 V3 _2 K6 T6 W) _( I有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。# Q2 f% E4 [6 v
; j# O# l0 P+ @" E- W- O8 O+ a
例如mmioOpen
9 d2 ~+ _/ W2 o+ u: r F
# w2 r$ x* u+ ]+ [; y C M#ifdef _UNICODE7 |) }4 ]9 M# u' `! k! i
if (IsWin98())& Z: x$ R Y# }; I9 A3 u3 k
{
7 g" A0 m4 j/ J# }% W+ c USES_CONVERSION;
5 }, i, I9 i& ~# M1 x' L if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))# g0 v- R* Y3 u7 U
{) k) K( p2 a: D. \& v1 k
AfxMessageBox(IDS_ERR_OPENWAVEFILE);+ L8 O7 I) t( a8 K
return FALSE;
1 ]% K4 j& w3 b$ F }
( k9 Z1 R# _0 }+ @ a; e}
: u5 B+ c& J+ v- ~4 l% lelse
. u- X* I$ H( `4 F{: B2 y/ l& O e% m2 N
if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
$ f; k! v' J6 \ {% Y' t4 Z V# E L. F1 y4 R
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
7 \6 j( J) I% ^0 S6 l6 E1 S2 r return FALSE;: o! ^- |/ |% _. c! {! M
}
* I- m1 f+ V) a}9 G" w8 y0 E1 A1 m. ~; n1 v
#else
' K1 x+ t) J. i0 t- V+ {if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
" ~' ?/ L/ u- r. Y+ G: H8 n{& v3 ?; m" c S3 U/ p6 ~6 r
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; }) ?* \* J: }/ G: S* d& l return FALSE;) O) A1 ?+ k5 U6 u+ U( P& j* Q
}! r6 a! D- s7 P1 X, ^$ G# ^/ _
#endif
$ @- y# w9 C d- t3 X
6 q- ^$ V; p" N四、对于ON_NOTIFY通知消息的处理。
+ r+ w' R( F& k# M" L" X8 t' } T# c; j a4 B1 a! q5 P
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
7 B) F$ y) a+ H* k) W' h" \( m6 N: q. b
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
0 n+ B8 o# Z* f. V& Q8 N+ Z/ W) r5 _2 |9 a1 q! j5 U
改为
" E& }: s/ ~1 G& w' l1 G; ?3 r7 B: ^- }2 g! K: T) @
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
9 V' w- w. L2 o- ~ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
) ^- m }; ^5 R) Y# z- a" m# H) w6 o; l* d! |% c
这样可以在WIN98/2K下正常工作。 |
|