|
|
编写WIN98系统下使用的UNICODE程序,可以使用MSLU。5 P- d7 ~8 ^" D* X# ?( v* ^. Z: V
% A' m% T9 s9 {. h2 a; M+ q
一、使用MSLU的选项. j2 z/ d" x, n
$ S9 P9 U& |, _( _4 |二、调用unicows.dll失败的处理
. v7 n6 q/ \, S N$ W$ e9 o- ]' N3 M
: `# X$ D$ ~7 a8 O三、无法在MSLU上正常工作的函数处理
/ t, L& [: z' ]8 J6 n9 |4 A
$ e4 z7 F+ n2 K, _) L四、对于ON_NOTIFY通知消息的处理。
/ T* {1 x8 h0 o3 n( u. m0 I1 {1 e0 E* r% E; P1 U8 q! ?! ~
# l/ ?* \4 C+ i& v G3 x7 a* A4 a) U3 q4 @
一、使用MSLU的选项. X2 X4 c- l6 i# a: }
4 F. L: f5 |5 a
MFC的静态链接Release版本
* B- f" m: Z: \* o2 u5 Q9 h! K3 J
4 w1 n* n) G. D5 \& VC/C++选项:: v8 N7 d2 w% e; [
' b t8 Y- i: \3 y2 Z' t. i
去掉_MBCS添加_UNICODE,UNICODE
3 S0 K! ^2 A& i6 n0 `& l" {/ u% A
Link选项:8 X1 _" h- a% M7 n) j
U% r2 G' y$ G% T9 I+ U/ L
Output->Entry Point Symbol:, a3 g+ G e' e f9 Z/ S
" ~' w4 U* Q) w6 f/ twWinMainCRTStartup
* _- D' V9 `' P/ H1 h0 I7 k4 `9 I# H2 s6 ]3 J; t. N
Object/Library modules:1 D6 X2 h/ `/ O. j0 ?. P; M
2 m( j& c" Z0 a- M4 M
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 $ I+ v4 Q( D/ q5 L5 ]1 G
. _' i, y( G8 |! Y, m
MFC的静态链接调试版本:! @% [% T$ r1 B1 m# t3 L; T
* V- E' W. m J4 m1 Junicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
" T7 p! C: d$ }2 R, H3 [$ q$ {! B$ O( `9 f
二、调用unicows.dll失败的处理4 Y6 ~ \ N* g! k$ H1 N7 V
: \0 F3 J7 u3 N当WIN98下无法加载unicows.dll时注册以下函数进行通知。4 K M7 X& o! E. A+ j
& W; E2 y8 r& s O1 U9 ~8 v& a
HMODULE LoadUnicowsProc(void)& {5 R+ J: e1 p }+ T) a
{
4 s9 e) j1 @3 Y- H- w& j/ B& `HMODULE hMod = LoadLibraryA("Unicows.dll");
# b [9 l. k- V! F) q0 {if (hMod == 0)
# W+ p2 n1 ^7 u2 I* X V{
: H T5 N" \7 B3 p% X9 ? MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",3 |+ C6 j" A" J7 S" v8 |
"MWP",MB_ICONSTOP|MB_OK);+ z' } }3 ]: T( G. ~) w9 C
_exit(-1);/ _4 {9 c6 U% y. `; i
}( v% y' h- x7 K2 m1 U
return (hMod);
2 Y0 q# p3 T X# l3 y}- s( ~$ M' R- d) A" _- a
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;) u2 w+ Z% [" q7 |* Z
0 L' O. W1 {7 v( s
三、无法在MSLU上正常工作的函数处理
3 H5 ?, w' K+ @+ e" g+ ^0 g
+ @9 z/ S: X3 v) J有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
! Z4 O2 @7 W( O/ s6 Z0 d+ z1 y6 w8 [
例如mmioOpen# V7 r' k& m0 g5 {# e* f
* m2 l" H* `: h' Z2 j, k#ifdef _UNICODE$ |$ e& Z2 _" a' y: m0 f
if (IsWin98())9 n# R+ |& j( z2 m: m
{
" q, x) E( V2 b, X( F* m2 s- d5 A USES_CONVERSION;
8 e# h. v$ }; r if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))+ ~8 n3 {! v' y, I) t
{
0 \9 g! I {% J5 |1 ]- l AfxMessageBox(IDS_ERR_OPENWAVEFILE);
) I' x7 y ?3 P return FALSE;, L0 U' }+ f6 ~" M
}
+ [& k4 M4 X* n! e5 j}
, z* k2 {# q" P! Jelse ) ?1 Z G. x7 E" e
{
& n) D: c2 q& v- B0 O if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))" W/ g* M1 x8 ~! R# g5 \5 E, T
{, |' Z. A) E! ^1 n
AfxMessageBox(IDS_ERR_OPENWAVEFILE);
/ D% k" g e0 f9 E( v) }) L/ ^ return FALSE;" U" ?# d8 @9 a
}
( I: W3 V& i1 \9 V}. j8 i5 U3 z' I6 {# n3 J7 Q
#else
# K- E3 B5 q. G, i4 i2 tif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))1 O: G! a8 i1 @% Y
{
, [# c z' h7 Y7 T AfxMessageBox(IDS_ERR_OPENWAVEFILE);
* |3 ^# y& E0 E; X) i return FALSE;5 ~! ~4 M$ ^, }8 q
}: e3 |# R8 [ ^
#endif
$ Q3 _% b) u% r' h0 Y& s2 X3 X) w* C$ Q( H0 R& @6 p: o/ s) N
四、对于ON_NOTIFY通知消息的处理。
2 I. }) D7 R6 h* |7 J* x8 m
5 e6 P1 F2 Z, s" K对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:& T H' r) i5 L' R( T) h- q" _
# h; ^' a( W3 V& U- LON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
. q' ]* a% F: U6 l5 Z; ?- H9 U
3 o0 O3 m! G2 ?- `改为5 h: m& C* a+ m
) N7 L0 r N d0 P, t: r- w$ ~- n
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
H$ E; C. {$ q+ fON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)& O5 u, U/ g% }2 E" m7 M
2 }* J8 d8 {% A) F* ?
这样可以在WIN98/2K下正常工作。 |
|