|
|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。9 Y1 N$ X! f0 R* b
0 q' o! K3 N2 I# W/ [4 \4 u: N一、使用MSLU的选项
; r9 a( g$ a- z1 N" {$ W+ W" S
1 V) Q3 ~- A" q二、调用unicows.dll失败的处理
, e7 d3 S4 P9 i, Y, N2 N5 Q) B5 j# X$ p3 |9 @1 {( t. w
三、无法在MSLU上正常工作的函数处理
6 i; R' Z7 n7 o* o0 t! y& G
6 ~' Z" s: D! R& s7 Z四、对于ON_NOTIFY通知消息的处理。
2 ]6 \# a- s$ R$ i+ i
, i8 K0 }* W3 F4 v/ m% Z7 E
: j. g9 q& p) ~& w# d. @3 M/ k: U. I0 X; T$ H4 D+ N! L
一、使用MSLU的选项, s7 q# j$ e. ?$ j' K6 ]0 v; B
: s; j# F, J; u) i7 P s0 y
MFC的静态链接Release版本
4 M( D" c% V& t# z6 V/ ?9 N5 ?6 L6 K6 ]1 u: w7 A2 i+ Z6 z d
C/C++选项:8 D5 p M) S% Y% O& e
# b+ O0 w& h6 u! B6 s( x1 C, z
去掉_MBCS添加_UNICODE,UNICODE0 [$ {9 ~. }! K( P
0 h; z/ O b$ N6 K# E! L) b) z; x1 yLink选项:$ s2 ]+ L$ s! {- n3 U( }* b* L- p! ^
% I% u) j* B. Y. V1 _" N! F1 H) ^7 U
Output->Entry Point Symbol:
4 A. g- m+ a2 G( s5 h Z1 L# [
1 o( _! t! @' q D/ ?wWinMainCRTStartup' m( n g2 {. z v3 o) g
( a. |, U+ z ]/ {. UObject/Library modules:% T( ^3 k% G* j" @5 M- _2 S
v( a4 @3 U" L3 E) {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
g/ Z+ c1 Y: L4 _
9 @+ ^* z2 t: mMFC的静态链接调试版本:/ n1 G4 n, Y8 W) E& F
- w9 i5 a- [: x" h6 [
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
3 \7 A8 X# v+ G2 j3 k, X
! R7 L% e4 y3 k. y" l; {6 r: F L. K二、调用unicows.dll失败的处理" F- u7 U. Z% c$ Y g( b$ C7 O
0 s( d( t( ^4 v$ l; X- m9 }% v8 c
当WIN98下无法加载unicows.dll时注册以下函数进行通知。( K2 D* o) C& q! T. f# z B
5 B# |# Q2 E6 D+ v6 I* S+ A( rHMODULE LoadUnicowsProc(void)
' `+ g6 o& U$ ^, R{
2 \1 o x. A" q1 V# R% {HMODULE hMod = LoadLibraryA("Unicows.dll");
1 j; r# {8 n# Jif (hMod == 0)
: B6 Y+ C$ `' |- e{
( g9 \( K( x, k, ~ MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",) L' x: ]+ V- \' U
"MWP",MB_ICONSTOP|MB_OK);2 S; k& U) l! s6 s4 Y. E/ V* N; f
_exit(-1);0 n4 q7 v# W& n' ^$ e }
}
8 s3 u5 w, P8 L, J( Hreturn (hMod);
- P5 O* G' V9 o2 w( D}5 q# B5 u5 u$ ~- l: a& s" p2 @
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
* j7 Q) k& c; t6 O& L" V! X8 Q# f+ @4 ^
三、无法在MSLU上正常工作的函数处理
/ V! _5 R3 U# @; r" V1 O7 [
! b% z$ h* Q, w有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
9 U" a) |# v I" q0 q$ s
6 M: W. {6 ~( ]- m4 H. ^例如mmioOpen
1 D3 Z& v U7 e- E
; U8 u! I0 t# D/ a% h' T#ifdef _UNICODE
" Y" K5 `! ~2 n8 f- J) B4 Rif (IsWin98())
- E1 @/ M! K9 a: F{9 w: T4 j" G& V, l1 h4 R3 u1 z
USES_CONVERSION;$ F- O3 {4 Q. I( o5 x( n- v9 r
if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
" n* W/ F8 a2 i; s5 Z {6 g/ A2 |% c4 R! ~
AfxMessageBox(IDS_ERR_OPENWAVEFILE);1 e" B8 a/ _" f8 c
return FALSE;
1 v3 T$ W3 L G }
* S2 I A3 }8 I; R}$ E$ H- A E5 X: ?+ p
else
) E- Z$ S$ ~) O{
$ g6 A& a8 Q1 V& U6 Z if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
2 b# _6 S1 D- } {8 |. c( K1 s9 U& {7 g
AfxMessageBox(IDS_ERR_OPENWAVEFILE);' p5 w+ O9 a8 x; E/ Q: ]
return FALSE;
& b( B% _: @2 R# k: Z }, |4 q k8 Q) R" M- F' N
}1 ]+ u# i3 i8 H e0 h
#else
1 r! s' e2 k" K# C' o2 m% zif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
- D1 [7 Z/ \' u{$ u" T' ]- e- M
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; \( I$ P) W7 t/ x- }9 {/ ]& `0 m return FALSE;; @3 U; L( a }: s
}) ]7 v8 R) V+ @
#endif7 t3 z- c) y0 E, C$ `4 ]
. G6 g: v0 ]6 u) [: D7 T
四、对于ON_NOTIFY通知消息的处理。
, d+ M u% z" u% e6 P b2 f. a) v1 ~# o1 q+ u) K) l: @/ J
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
# k* M9 U! O5 X- ] g* c3 ~# l% o( v/ ]
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)* X& P: x7 Q# i
' t: ^5 p5 t7 I" l6 y
改为 i9 f7 A4 f+ [) N
7 _2 B* |2 `3 h1 g
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
( O+ m5 Z1 X/ y' b5 l( w) hON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)# |8 |1 m7 X! X6 X- }1 l7 E
* g, ~9 m% }+ B" C* {0 h+ R1 I这样可以在WIN98/2K下正常工作。 |
|