|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
8 M" [1 b7 x0 Z: x( ?( l" x/ [% G0 T
一、使用MSLU的选项# x+ N0 d* h( M- ]' v3 R
* x* j/ Y; |6 U0 I1 B5 O4 e% b3 J
二、调用unicows.dll失败的处理; u5 p( L" _# Q! T$ J- L
- g3 Q# L2 o8 a v4 j5 S$ V
三、无法在MSLU上正常工作的函数处理
4 T! n- K( Q* W" r, `1 N8 b) n0 a$ a g' {
四、对于ON_NOTIFY通知消息的处理。
/ U7 S! r: I( ~1 I- P# Y5 b A8 S% u5 A# R- P+ i, o3 o
' m. u! ]7 L m1 `7 W
0 H. |& w6 Y* z( `6 m/ i* M一、使用MSLU的选项9 x8 D3 i7 m" @6 I+ t; S
' D4 g7 _; `+ Y7 N2 Z4 W2 qMFC的静态链接Release版本4 Y# o$ f2 ?0 Q ^. o
+ G0 W. F+ W; R3 ]# L
C/C++选项:; } \0 T9 T6 K: ]% [1 ^
8 C5 P' Z" d9 F0 z+ p
去掉_MBCS添加_UNICODE,UNICODE
1 q7 H6 \5 W! h8 {% H7 Z( S( [- Q0 m: p! r
Link选项:
# z3 b1 Q4 j' Y @: E, i' x7 j3 s$ a: v
Output->Entry Point Symbol:; L3 i2 q* H/ h( A) w& i* |
7 Y# Y7 l( t7 }, F. k! gwWinMainCRTStartup
& p6 M6 Q( ?( h. ^7 E% a- u
' ~0 y" v/ P" p" BObject/Library modules:
8 w4 W" y! @, _4 G1 G8 |; o, o
" ?% Q0 z8 y: L" a% Kunicows.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 + j2 j, U3 t* _* J+ \( C
) D, K+ ~; Y0 l. V' X
MFC的静态链接调试版本:3 ]1 F& d" f) b8 i
9 u5 _% x' B5 lunicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
1 \* B2 R! K# R8 U7 z/ `6 \" b# }/ d9 e1 I( g3 ` C
二、调用unicows.dll失败的处理
) _5 h2 }7 A3 Y1 F0 g
1 e' R# y2 `0 O; ]( ~当WIN98下无法加载unicows.dll时注册以下函数进行通知。
, Z) \) U8 B7 \4 r
# p8 g9 n+ H( h f4 p% u9 GHMODULE LoadUnicowsProc(void)
5 J/ B3 f J' Z5 p6 u% q) f/ k) P{9 b. J/ X- j9 J c+ J& {
HMODULE hMod = LoadLibraryA("Unicows.dll");
' L, ~& N/ |; D/ g6 _8 mif (hMod == 0)6 ^, T+ m2 m z( |, l2 n
{
/ \- r4 K' Z9 b; | b MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",% \6 }- o% i/ A% n3 b5 [
"MWP",MB_ICONSTOP|MB_OK);4 m/ r& N1 C) ~! A. X3 n
_exit(-1);0 z' \3 p, D, M- G
}
6 I" C7 [# D3 S4 Ireturn (hMod);
X# F( p& q- d4 V+ m( ~: ~}
: {% ^ k& h* S6 G: ?4 m+ ^6 x& eextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;7 f( I" g* {( O( P% q: E
# ?3 T5 O3 F* x* ~2 c8 r
三、无法在MSLU上正常工作的函数处理/ w" B! ^: S! G) |: o: A
, v2 p" x; | K有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
* [; J0 M7 Q1 r5 A {0 R! a# S$ c V6 Y4 Z" z( ^, O- a
例如mmioOpen$ N# e- O: ~3 _
; L' d2 H" {& h4 X2 y#ifdef _UNICODE
9 ]. \. A, | Q( D% f: Pif (IsWin98())+ n4 o& U2 m& }+ ~( c1 V, m
{
5 d. x* w0 O" k* ~, V USES_CONVERSION;
. p% b1 ^% X2 x if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))$ S" K5 f4 w: w( f+ F- R9 a1 _8 M
{
: q1 B% @3 W/ v5 Q AfxMessageBox(IDS_ERR_OPENWAVEFILE);
: A' M: g! Q! K& \ return FALSE;
/ _7 f1 \; h% H% F4 F+ J }
( u" ]/ U, c* N3 L a}
7 d8 s. W% t" H2 f& s6 Telse 8 E& \) y1 ?/ w/ j
{8 b1 A; B" k4 w
if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))' X) s& |7 |7 d6 Q+ S# |
{
; j1 x# W' q- w7 u AfxMessageBox(IDS_ERR_OPENWAVEFILE);
! @$ T0 p+ K" h( L* \9 F* b6 ? return FALSE;
' @) w2 ]6 ?+ t8 y }' E* j/ X, p1 n1 X7 y: n
}
B% S% G1 W- T#else$ g6 _. J% \; P6 @2 i, n' ~+ _% f
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
S7 {! q4 \. c: V( ]9 p- l9 k{
4 p8 ]* e. r! s+ |: t AfxMessageBox(IDS_ERR_OPENWAVEFILE);2 n7 y+ T' t) d m' B8 v
return FALSE;4 W+ j, H+ a4 X& y3 I9 R! h0 S
}& n/ p; B! j9 e
#endif/ Z3 V6 A' c; n1 I7 a) G9 y/ L+ M- f
" G5 c9 z# I# Y: x四、对于ON_NOTIFY通知消息的处理。 O, k h- x0 V
" s- X5 o5 i `, B# J
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:9 y% r6 x7 C% [* O0 Y; i
5 r' [4 \. y% G L1 y6 I- TON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)/ `8 N' G) M: u, \) E! m0 V6 m, Z# b
, a. o2 a6 j0 |改为+ `( Y" J) Q1 a3 Q
; E5 T) C+ x9 C* r, a% ?
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)1 J5 {2 m/ G, _
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
9 i% L3 L1 p: k( D/ n9 U/ H- H: J9 s1 {! P2 D8 S9 h8 h0 z
这样可以在WIN98/2K下正常工作。 |
|