|
|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。8 ?1 O# O3 ^ F9 W3 V) Z# c% [
& E% n. e) a" s* J. b一、使用MSLU的选项) u" Z% H$ S' K* |
! |% ^* d9 V5 Z二、调用unicows.dll失败的处理
5 d/ c4 }" b6 ^- Y2 Q: n9 d: n. ]% C; Z8 M
三、无法在MSLU上正常工作的函数处理
$ M# H# t$ N' i! M( o# b; Z% x8 F E
四、对于ON_NOTIFY通知消息的处理。; l2 x3 W2 Z$ I
; w- B2 x4 \0 t6 k( C* H( P
9 ?; A2 {' q( q$ c) [
- T; A5 @9 @6 t6 E" f% z
一、使用MSLU的选项; P2 W6 Q6 N' Z6 v; ]9 ^
$ i3 y; t% i2 }# k( M) GMFC的静态链接Release版本+ d- g2 c8 h6 |/ w" p
& E, I8 O3 _* A( qC/C++选项:
( F% s2 o; `) K/ O, S, |
: l- z" a* h- B1 m; }% X9 G+ D去掉_MBCS添加_UNICODE,UNICODE
0 L- G% E4 L" b m; U: e+ c/ N5 N& T W+ E$ y
Link选项:
& O7 a7 u$ I% l7 j% ]& l# g' f2 S
* a( [" S2 ~. J: b+ F% mOutput->Entry Point Symbol:
" d! m" d5 g2 E) S8 g" M* ~. d
3 C$ ]0 l: m0 v. y) i& BwWinMainCRTStartup) C" j9 |! }$ h/ }% {9 N
1 }- i$ X. z; x& \& ?
Object/Library modules:9 {. P1 @& t" {1 q% j4 `7 ~5 [
( h) r7 E+ r1 Y# p4 w0 x0 d4 x 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 0 P3 Y/ Q3 w% h( V; p) h3 I! G( ]* B y
) G$ i/ o1 E9 O. c& W" o& R5 j& O! }MFC的静态链接调试版本:9 L. N' R. i2 {
8 I7 Q( [* |! Z& \! y5 uunicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
9 C! m' y. T- N t0 b$ c. o7 t$ [! _' j3 {- b! l1 {
二、调用unicows.dll失败的处理1 m- T2 O2 N$ ~
, r% _# Q3 w# R' V4 X3 |
当WIN98下无法加载unicows.dll时注册以下函数进行通知。
4 [" O- Z' Y! S- g, V
) @6 @; s6 |. W4 e0 b7 E5 Y# \; }5 UHMODULE LoadUnicowsProc(void), W, Q- X/ w8 A
{
/ R! |& f* g+ a. b1 WHMODULE hMod = LoadLibraryA("Unicows.dll");* F) z5 O$ |- \4 v, ^% { o
if (hMod == 0) U/ `. s/ }* S
{
; y! D: \/ K E/ K' V4 N MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",6 u2 t3 Y$ @$ Z0 t/ {
"MWP",MB_ICONSTOP|MB_OK);. \! |+ m$ y# y
_exit(-1);; Z+ q$ y+ h8 j! w* N$ f; `. `
}3 L4 v3 q5 J6 {; M# P# w. G
return (hMod);. a6 A' |0 a' O3 T; ~
}4 M5 _' N+ u* d3 H* l3 h8 l9 O8 T; s
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;. e! F1 {& q8 Y* @1 e2 p
& h) z6 s. @8 F1 i# e# F
三、无法在MSLU上正常工作的函数处理' ~$ w; p! }8 t% {/ p
5 Y" v7 f8 S- Z' Z: I K
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
% `/ A2 P; f$ l3 a& D# O A5 @9 j. ~) n
例如mmioOpen
* Q) ^6 J' d0 A! r9 u5 \) ]& a( y0 W% T* `
#ifdef _UNICODE
6 d. D# A) p9 a2 i7 _if (IsWin98())
7 n2 _; G) w# R% |{
1 r% W" T$ W2 d4 H8 T USES_CONVERSION;
5 R+ M; Q5 m* V0 G if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
0 u$ S7 o8 u& Z! z { Q- }7 f. _" \0 e, k
AfxMessageBox(IDS_ERR_OPENWAVEFILE);6 d/ n2 e6 O" y. l
return FALSE;
+ J/ @. u' u- z+ l }
; t4 _6 e4 L" Z1 L7 B}* @- o0 Q- X0 \0 Z
else / W9 r6 J: q( p$ ? G5 s3 V6 g
{. Z, @' M6 K, _3 @; [2 x! [
if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
( B9 `/ i: T, c9 u4 l {7 A2 x& O1 i, M# B. `
AfxMessageBox(IDS_ERR_OPENWAVEFILE);3 i+ D# I* x/ f
return FALSE;8 T% a0 p/ S+ p e
}
; \" x, A( ^' o! Q# a) z}( `6 X7 _1 Q8 `( K' T' O
#else9 ~- m7 z$ E: ]
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))* @9 Q5 }) I& ]" h, Q
{) g9 F2 H; L1 \' K& y5 J9 O
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
. y+ j3 Y' `8 R return FALSE;
4 H2 A1 ?+ }3 {; f& J}( T( s! [! F, W/ X9 n
#endif
& K1 |; _) E, I- D2 O- n5 q
) d+ |$ F7 G7 z* m& K. r8 ^, e/ z. f四、对于ON_NOTIFY通知消息的处理。' @* R, }' I4 k
) s5 k5 n# m3 t4 J0 }5 O0 w$ v对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:# B/ H, {3 U9 F; @$ M. j& h
& V3 G a& w4 n8 p% o6 FON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
1 }: g/ w1 L& C1 o& l( ? b5 M$ c/ J Z- ~, Q4 ]8 l" X' G
改为) L' ]/ K$ U: a7 w) r) S+ _
! J+ K1 [ P* a. ^/ G5 nON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree) b2 V% x- Y& X9 M
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
- z0 U) {" D; j8 ~7 v9 K- }' s5 }, k1 q+ T
这样可以在WIN98/2K下正常工作。 |
|