|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。2 A# ?) ~) \* A3 J) ?: W% ?/ t
6 G# g, u4 x/ Y: D
一、使用MSLU的选项
( h9 k& i9 O2 S3 {5 B% E
) M( H/ |( E' N9 t6 C( P二、调用unicows.dll失败的处理/ I' V7 @9 Z" C _6 N; \
8 C4 @7 p3 u U$ X' Z
三、无法在MSLU上正常工作的函数处理
1 ~/ [3 W9 ^ a! O* Z' s
. J5 {/ T# A% D- K4 o四、对于ON_NOTIFY通知消息的处理。' a+ Q% W$ C, M6 T4 r
0 c* K/ G, T: ~" F
+ W# a: L \' W1 X7 q' Q1 l
2 r' _( k9 L4 {4 Q; l2 \- i1 k一、使用MSLU的选项
% i# D% Y; d+ Y' A9 } ~: p
, L* W$ T; E) R$ LMFC的静态链接Release版本* R1 u2 e4 n' v& h; R
2 D8 B; M% q* n# U7 i
C/C++选项:
( G; g$ T9 i$ W
" Z7 B8 P- s+ i, D( a+ H8 z去掉_MBCS添加_UNICODE,UNICODE
1 r, m$ O g8 b& U8 I$ E5 ~( Q2 W7 R
Link选项:. n0 ~9 @) k( [& o+ }
! n: M! _8 N6 u: o, f( x
Output->Entry Point Symbol:
% b/ `0 b: @6 A( _' B
* s9 I4 a( ~0 R- o, e/ f( E9 GwWinMainCRTStartup
3 }2 _% }0 t* n$ u7 i. v! D% e2 p9 x ?: C/ Q+ N6 |1 A% m/ [
Object/Library modules:
6 @, b% u& O3 J
$ D$ V6 } W2 Z7 Municows.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+ [3 r5 `1 r
4 U: ?; W0 q- M( p
MFC的静态链接调试版本:
: L2 m& n$ b/ Q) _
: f# W) c6 d1 V X+ X0 p$ {! y+ kunicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
3 A' d* k7 g. |+ I+ G8 Z) k$ B4 u( o A
二、调用unicows.dll失败的处理3 l; s) M% {* K- s q# |# D! i
% ^* c$ b9 Q6 g当WIN98下无法加载unicows.dll时注册以下函数进行通知。) l& w! [3 Y, N/ c! Y3 r) y7 h
% O; K, t" p8 H7 r# ZHMODULE LoadUnicowsProc(void)
5 g" ~7 `0 _) \) Q5 W5 c{
# v; s4 s& U) t: OHMODULE hMod = LoadLibraryA("Unicows.dll");# Q* S; V' r- d. d2 h2 l' ]0 T) r. i
if (hMod == 0)
# t- m/ G0 D) p# F{) K8 S0 P) ?8 i9 q/ c
MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",6 H/ V4 v' r6 w5 _1 V! e, h" ^
"MWP",MB_ICONSTOP|MB_OK);
' K# |6 }# z+ d0 ^, \ _exit(-1);) o9 ?1 h T% l9 l G6 W* W
}
. R: S5 [) U" Q) r, ^return (hMod);
) I2 C, j1 @' @}. B Y* P4 B# A7 X5 j7 q
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;! P1 q& k0 U. j3 S
. D9 P: ]2 U/ j三、无法在MSLU上正常工作的函数处理
- |( u3 D# D# W, v3 h( o9 s) y- R) ~/ `6 G3 c
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
) w a- b7 g8 K8 Z/ R* ]" J4 n1 c4 r7 y) X1 @1 _
例如mmioOpen- S% O7 N4 q8 l2 j# g7 ]
& _( \1 g, h9 H% s: e3 f' i! R6 a
#ifdef _UNICODE
* T* v7 {. N7 J1 M0 L& S- }9 Sif (IsWin98())
/ f3 |- [5 w: a' m) B1 d, q% X5 E& v{
0 M3 [/ W- M, w7 O. G USES_CONVERSION;# r3 B$ d- ~: `
if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
! F b2 \% {) P# x {5 L" L/ X' m s& {9 s
AfxMessageBox(IDS_ERR_OPENWAVEFILE);0 H: ^& E2 W" z0 f3 z. [1 Q
return FALSE;2 t; a, K1 o$ t
}
2 R/ p% b5 M) ^( `} V6 q5 U% Q2 |8 M" N+ x5 H
else : M' w z f" N4 [5 \' m- Y/ T
{
7 l( g( q' ]; o' r5 y! } if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
7 K& b( ~3 k( ?8 w7 G. t" G {4 ]+ y5 X: R5 k% [5 e+ @% u' V
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
& G) P( F; } N w$ ?' y return FALSE;& h2 @$ s8 F9 G
}
1 X, V N. Q$ N5 j; `}
" c5 I( z/ J( Q" i- d# L# U#else
6 @( q- f3 y2 z" v& Q4 Sif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))0 W: ?6 W8 V2 M; c. C2 C7 J
{
) f( ]- l0 L B5 z% C m AfxMessageBox(IDS_ERR_OPENWAVEFILE);/ ]6 W0 d! t0 @9 }0 s9 n
return FALSE;* @' r' Z* P" V2 g+ L
}4 b6 v2 [& C' Y7 e2 @/ g
#endif
' s) P% a$ v6 D7 L0 p
$ Y8 q7 D/ O6 w+ A. y. T" P四、对于ON_NOTIFY通知消息的处理。* v, ]* x- q( n& V6 e
7 p( N; {" `5 S/ G( T' j对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
T6 [! {( z2 D8 U( H) e4 p
) g, |% z" z. OON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)* q& Y7 X6 Y) ?, h" \
/ b- H; |* }* f! J改为4 g# c) K9 q' ?- K- g" o0 r5 k, v8 P
" A4 D2 `' k' O" n! w$ J
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
$ A+ }6 H% R( ]6 y/ GON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)& Q9 F. G2 E9 u' P8 n/ N3 o
: r( Q7 e5 Z) ]这样可以在WIN98/2K下正常工作。 |
|