找回密码
 注册
搜索
查看: 4884|回复: 0

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。5 R0 [& l; u$ d1 l8 r2 g
+ L. F/ S( s3 a* \8 P6 ?# J2 a% @
一、使用MSLU的选项
. ^( s" R% [" d! \' u. `
% F! M  @, g1 t# t二、调用unicows.dll失败的处理
: R1 r; I/ i4 C/ ]$ O& p, c
$ S  p) V! M* a7 z1 o三、无法在MSLU上正常工作的函数处理  M. p# X/ |" p1 g
3 c# G* {+ N" b/ {: l' K  ]
四、对于ON_NOTIFY通知消息的处理。
! L& v- M0 y) N) g& L" R" Z0 Q3 [) N* _
1 U1 ?: p6 y4 R: f  R; ?/ l

, Z5 j2 t( C/ E; h/ w4 c# m! n一、使用MSLU的选项! O' ]) ]$ ^' k8 V
1 |- H! U# _1 l2 B
MFC的静态链接Release版本4 H4 G" J5 b- L0 {/ _

0 a: _) l7 z# O6 z0 OC/C++选项:& W2 F6 ~9 k) F7 K

  R4 p) B  T& z/ V2 D5 W去掉_MBCS添加_UNICODE,UNICODE$ T2 P- \( i2 o2 _9 l/ N' A& A

% N: i/ Z4 N! M- a6 V2 V8 JLink选项:' U0 [- j7 }7 C  I

' {6 D5 E. k9 S- h- ?) bOutput->Entry Point Symbol:
" u9 d/ `1 @% C0 k( H
: b) s4 I( Y% _# lwWinMainCRTStartup
" h6 M7 h/ p) T4 M
; Y! [. _5 |0 N( hObject/Library modules:
5 U6 S* u9 x1 A$ g/ a$ Y* E6 d
( g$ M& P1 v& x1 }. e4 Tunicows.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 Y' R& V- \- ~! i1 ?- H( Z- v
/ U) U2 J8 k/ B$ _- oMFC的静态链接调试版本:& O5 n' n+ i4 P7 l  R0 Z
# Z+ s1 h8 V) V' s5 X' X
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
+ i' w" _, S& d& E( |" O
9 z( y: J9 N( H, a) g, }二、调用unicows.dll失败的处理
" b* a$ _( ^9 ~+ p7 n7 h: ~' f1 Y" x
当WIN98下无法加载unicows.dll时注册以下函数进行通知。
% i  ~# q0 J/ b. a  m: A  e
6 A( x; {' F- O- c& Q% K5 jHMODULE LoadUnicowsProc(void)3 [2 l; S) x2 c
{$ d) h* }  f# O( e5 H. F
HMODULE hMod = LoadLibraryA("Unicows.dll");' p& C2 H, J( ^
if (hMod == 0)
3 `* h' x4 m: c5 Z8 E( [{& l" A9 j" s: i. Y( R
  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
" Y$ ~$ y3 o5 f, ~  _! O& w   "MWP",MB_ICONSTOP|MB_OK);
$ Y$ A  y9 k* E( {. s  V  _exit(-1);9 H( v8 ~1 y; M, y4 p
}
' W! r! U: I- Treturn (hMod);
9 f; ~4 H) A- O$ W5 {9 k& s( d}
7 Y8 Z6 C+ `4 O$ J% hextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;$ f! L' x* f& H- x$ j/ U& ]% q* U

( Q* Q! s* T  k- s9 O8 R+ G三、无法在MSLU上正常工作的函数处理- h* i7 V' a! g$ |
& }$ Z9 l" a7 V
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。7 H# V3 c1 c* W( j) o, D

/ e8 u' ^% h+ p% W9 C2 U3 B例如mmioOpen
  k8 H1 a; v  A% u: w
! y# r2 U; T! y. Z1 W& n#ifdef _UNICODE
/ X: b$ M9 N6 B* q' Q( p9 Sif (IsWin98()), J9 D* n* K+ w$ B" O! J. R- P2 O
{
; h7 C, ~5 b9 x  USES_CONVERSION;% [& O6 P- E/ v4 C
  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
- I, A- s" B" }2 U  {
+ R) M" g3 n# [  _+ i4 _  o+ D   AfxMessageBox(IDS_ERR_OPENWAVEFILE);
. {; c, }" u. ]8 b& i1 z6 ]! H   return FALSE;  e" m# z( T9 k" _; X* z
  }
! a: E- O6 @* }$ d, @}7 ?% k1 V" u$ |3 G" b7 o
else
7 q) M5 ]. f0 d& d% s8 \{; Y. A3 q4 E/ n( z
  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))9 A% C4 D/ l" c! b: c) d) K
  {
1 \6 c- M7 _$ B6 d) |% b+ Y   AfxMessageBox(IDS_ERR_OPENWAVEFILE);2 s9 }% Z( E! w0 i4 r/ s+ J
  return FALSE;* _- x4 x5 p/ N$ D
  }
7 V$ P  t  V- Y$ _$ M}
! C: t1 U! N& k' E9 g: L9 w#else! t, F  w3 P* {' d
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
  \! i- Z# q+ m{
+ I9 F' }, _, a3 W+ B  AfxMessageBox(IDS_ERR_OPENWAVEFILE);; G6 J2 Q* o3 f) e# Q7 E/ i
  return FALSE;5 D. b, |6 x9 t8 \" s7 Q4 g
}
5 n" n3 ^) |) O8 G. Z" J: i#endif$ z4 t8 {% i4 G, B

& x8 f3 I: {3 N' c! l四、对于ON_NOTIFY通知消息的处理。
( Q* ?- [# S5 ]" @
6 b0 M; k  M3 w0 ?& X对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
5 n1 X' n) D9 I, W# {
" J, ^2 @  Q5 A& e2 [$ {, iON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
; D2 A- |+ T6 w5 M2 x4 W
' _3 F5 W- D. u% I) o- B改为
5 k! t8 L' U2 q  O# n0 \9 O# Q9 a) U( ]- {! S
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
; |  o/ A* B! m% o6 M0 C( yON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)1 w$ z- a3 a* i! E- |
8 u% M' A" N8 k3 b3 B1 y5 C
这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:35 , Processed in 0.019005 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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