找回密码
 注册
查看: 5066|回复: 0

[收藏]在VC6.0中使用MSLU编写WIN98/2K下的UNICODE程序

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
' c  x/ M- H4 u8 K& A& e, z4 ?! g. f; `! {+ f
一、使用MSLU的选项1 b9 V/ E, U3 b

$ T$ H# i8 I# F" B6 Y二、调用unicows.dll失败的处理9 Q7 t* N( @0 ]( p  [, R1 F

1 C( O. r  b; t: H5 a三、无法在MSLU上正常工作的函数处理. {- y  b* e5 H+ S8 q) |" X8 P4 ~
; O' L( E6 G: y; Q; ~* c
四、对于ON_NOTIFY通知消息的处理。
' I" b/ p# q0 ?8 r( {, F6 }, o; ]$ M7 P
6 L* l+ c& L6 U; R

1 n9 B2 T; G% W" t! u# p/ u0 k一、使用MSLU的选项) P! h5 q3 v/ j1 F: E  x* L4 @1 V6 P

: x; }( C4 D6 E7 y! F- g! bMFC的静态链接Release版本
! p0 R* |! M9 j: j0 o3 `
3 R: t# q' ~; J2 N' ~7 eC/C++选项:4 t# O! E$ z$ Q! l9 J5 j& ^3 O
3 T' `$ r- `& m  J1 s; ]
去掉_MBCS添加_UNICODE,UNICODE7 v8 S1 {# N( y' ~8 q/ P$ {% m

" H" f+ C+ U3 ^. D# l0 Z# j2 qLink选项:7 s' L* J. v2 E

  P. P( b. j4 Q, o2 cOutput->Entry Point Symbol:: i- t0 x( b' j

& [* l" r; \/ H2 f& {$ u: iwWinMainCRTStartup
7 Y* j; t8 j  Z& K/ B# O4 C/ c4 P: J6 y) l" ?. e( s9 \; X, s$ r2 J) j
Object/Library modules:. a$ j; r+ G4 Z0 z1 ^7 q1 V0 }/ W

4 q% c( D2 [- }1 t! O) R( V) j( ^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 I- F1 |; f: _1 d1 G' N7 }" [+ c# D5 t) d5 C
MFC的静态链接调试版本:
8 P) ]7 O& D9 w5 ?" Y+ t+ q7 J/ r* [5 v# J6 t
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
# U0 T, ]7 [  V/ I2 }* |8 x0 e1 G: L+ X4 O& f
二、调用unicows.dll失败的处理
- b. m' H0 G' z/ \/ K) c( @. A! U
( t* A( p. {" J* `% W/ @' T* V当WIN98下无法加载unicows.dll时注册以下函数进行通知。7 C- K7 a2 `  T( f
( U2 ]5 L9 ~+ \
HMODULE LoadUnicowsProc(void)% L3 I; W7 C& N: Q) c- S% U# T
{& [" w5 }4 m# ~6 j
HMODULE hMod = LoadLibraryA("Unicows.dll");; _) J' R& q7 h2 v
if (hMod == 0)
+ j3 C; O8 W6 ^6 L* L# T{/ K% K& `6 W0 H! O
  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
0 l' ^9 V9 f* d( j/ @   "MWP",MB_ICONSTOP|MB_OK);
7 S% Z. m2 Y4 _7 G* l  _exit(-1);. Q4 D. r- C7 U4 V
}! r- y* R  E  d6 x: z5 u* |
return (hMod);$ W  E* m4 Z# x% C5 M
}" ~. y6 F% D9 f- r6 {
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
6 H$ l& `, P/ t1 Q+ o1 z& E$ \5 g# K$ p7 M+ V! X6 h' g
三、无法在MSLU上正常工作的函数处理
' i1 g: V# x& L" n: u  s/ p3 r8 y4 u. [6 F1 B' o/ D8 b
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。4 f0 \- }6 {# x8 Z/ E
, m# y! p( @2 V( _+ l
例如mmioOpen
, t" L! A# L2 F& c, y. B0 \
( t( y+ u2 F4 k$ D#ifdef _UNICODE. D3 }  Z3 T& M4 o% F) Y# R
if (IsWin98())
' d7 ?, u  M( d) z{
* Y+ h9 R- W% I  E+ N( _3 k  USES_CONVERSION;
0 n9 X' N( l. ?7 F( t  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
6 p4 }0 F7 F2 e. W& N' L1 p! v* h  {
  b! h0 i& G1 `# I  L$ V/ Y   AfxMessageBox(IDS_ERR_OPENWAVEFILE);
5 f( c+ @8 ~' G! S. _# |6 Q   return FALSE;" f; ~3 Z) `2 s" d0 o
  }' U4 n4 z" M  {- M. _  A6 g' \
}
2 p6 V2 `' \, y& z$ {else , a: e  |2 ?  e* ^3 H* W
{* K4 G3 W9 r9 G- C6 |; ?8 l# Q
  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
5 q" A/ x$ s5 @; k7 ^% H9 V3 f+ n  {
7 K% C% l. V: W6 n" A  x5 d   AfxMessageBox(IDS_ERR_OPENWAVEFILE);
0 f1 ^# N' g( Z1 \   return FALSE;
( ]; L% A$ N; m( [# q  }4 V; Q# R3 F% U3 l
}, X. j0 }: G7 C+ t, o- G* M5 |
#else
' s: r1 a% t. J! p  rif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
  Z2 k0 Q/ J. v) C" k* V1 Q{
; n' e' G+ b/ W! v  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; B8 M1 p. P: \$ h  return FALSE;
' V! l6 K2 \5 {" p  X}/ N, F; E1 T4 g- c' o2 @
#endif
0 s- r) x8 i4 g' p# Y! d' a2 F7 n& g0 |. r
四、对于ON_NOTIFY通知消息的处理。: R' F6 J2 A- h$ A1 x3 j# E

' T0 o- `$ M, _; m6 S2 N1 Y1 @- j2 b对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:, y; c8 _1 r! Q
, z9 v7 v& c. W& e) l: l/ S
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree). O  U" V" H2 O' `0 @! n
& N: p9 Q7 G0 [/ y; x: s, A9 k5 n
改为
) V" z3 V3 x3 E; Q4 v1 ^0 L3 U$ W  A! h, h/ H, ]0 y7 m! v
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
! H" \8 t. D3 ~3 @! u2 nON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)$ y3 a: H: u8 n4 _) L

! h! q; K6 l$ _4 B. F  B这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2026-10-2 03:03 , Processed in 0.015984 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表