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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
& P1 d9 I6 c  A6 [8 ^2 `- u0 H
7 k" y( s+ u+ @0 `! d一、使用MSLU的选项. m' y1 i/ r) s9 S9 c( [' X

1 P  J0 l% {  g: S二、调用unicows.dll失败的处理
) p! ^& P+ L( {7 ~! q0 s/ |0 p/ Q& x  C. _4 J7 B* P; U
三、无法在MSLU上正常工作的函数处理
8 D' w) m/ @9 w" F  |* i* W" a& O' \- G, p" l
四、对于ON_NOTIFY通知消息的处理。
# l) L8 L% e2 _' t0 S, N* U
3 o4 h2 ~2 ?. G4 b4 ?, t- z" A; I) w1 j3 o. [

" z  n' `& l( ^4 c一、使用MSLU的选项9 _9 L4 ^2 X$ `, B

% \: R% Y( M9 t$ {0 U# J: }: v) T. VMFC的静态链接Release版本
' ^7 Y9 ~4 L- ]
7 ~" G0 n- s2 x7 m* q# z! ^C/C++选项:- J/ }. D6 I  M9 S! \- w

' a$ H4 |" \8 e; V) W: c3 l去掉_MBCS添加_UNICODE,UNICODE; U& e0 d- W# V$ w, {
$ ]2 {/ m1 e$ q9 {' h
Link选项:
! f9 y, ]0 A5 L) ~/ I  b9 p# y
* q' _$ v% C$ J* EOutput->Entry Point Symbol:
- s2 D2 t7 [# U6 g1 h' F6 F) T! _
  g# p, @! @2 L" M0 E1 f  uwWinMainCRTStartup8 x1 z/ o/ {0 G1 w0 t& k3 D
8 k* K0 t4 ~8 t% p* M6 p1 U
Object/Library modules:
; i0 j4 H' q& b, X- @8 h+ N+ a* w2 T) c0 n2 B' R
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
5 _7 I0 K  Q& `" K7 H  Q7 |1 y7 f  q
MFC的静态链接调试版本:- i6 f# s9 s$ S/ R- B/ F2 Y

! q+ K1 l9 F. qunicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
( a4 z4 ?% `8 q) Z3 e
/ N/ A# P- I+ |/ U0 _" A二、调用unicows.dll失败的处理: ~7 {8 g1 v" \1 c$ Y

6 X; R& L# I+ ]) b. J/ h6 D当WIN98下无法加载unicows.dll时注册以下函数进行通知。
/ R, B5 e8 z3 \; I1 r- j) r% L( ~
$ s3 T) \3 y) jHMODULE LoadUnicowsProc(void)
2 I1 Y1 G% v9 T' x7 C4 D3 E4 U9 z{
! i# G/ |- q* O9 {; D, b- `' SHMODULE hMod = LoadLibraryA("Unicows.dll");
& h! Z( i/ H6 d" j* J* f6 A' J2 |9 ]if (hMod == 0)9 ]& v7 w# Z4 y5 V
{
7 z4 e" B9 j: l$ a1 H8 b! F  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
' m, H  `4 |2 R$ S+ A  x   "MWP",MB_ICONSTOP|MB_OK);
. J4 W* ~9 s1 ?7 T  _exit(-1);( @: W. i$ d" s/ c
}$ e9 H$ ]: s; f1 h' k, j
return (hMod);
, p$ }9 d% U4 q}
2 A; H! P# X5 S" t' E8 y' Wextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;! c( }2 p  ]% T
1 D& H/ I( j* m! t; o
三、无法在MSLU上正常工作的函数处理
0 X/ c+ L4 U6 a
# u$ Q  ?0 U+ X8 e有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
+ @. U" q* b* O6 k' _$ d  M( x- U% l0 d, ?  d9 Y8 u
例如mmioOpen# ~5 L1 i- A8 m0 c: ~1 n" q: a6 A

* u  `, w3 O( j2 y5 \( b. ~# k#ifdef _UNICODE# s$ ], k9 [1 `
if (IsWin98())
7 g# R* r; H3 x# ?{
# {0 J. e5 x: S9 \  c  USES_CONVERSION;$ H2 z$ ]4 V$ z0 R
  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))2 z% O7 j% ?% s  C/ `* @
  {
4 ~* R6 \+ P/ Q9 _$ E   AfxMessageBox(IDS_ERR_OPENWAVEFILE);/ b; C' S5 b4 U6 X  }7 E2 n, r; Y
  return FALSE;
) b, ]6 Q+ M2 K/ g4 L: Z  }, }, o' h6 B- s0 P
}, i: t/ V9 F6 P# |
else
+ B; r6 T1 S6 A0 g8 P# k7 _: |{
3 b0 G# s  T( H# [3 ]% a  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
7 d  G3 w7 a  a9 }- i3 f  {) J  |9 X8 N+ u, |! N2 a6 w, F- g
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
' f' u; @& k9 B   return FALSE;7 i2 ]6 v: t# U1 j
  }/ O; }, N9 S( ^. }& J/ O  B% H
}
- D; q! F$ x- P4 h, p3 P#else& E7 }5 D/ K; A! k# t; R& [
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
) p, U* e/ o; }3 M7 f0 H% U{' }+ N* |0 c$ v- c! ]0 o
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; h2 n7 s0 W+ C  R/ c8 Z  return FALSE;  C% G4 }/ {$ r" d' {$ I  G+ k
}
9 M2 Y' i) O3 V- ^' \6 J- K% T#endif6 ]% i8 }( ^8 ?* A
* t3 f6 k: i- i- s7 l& Y
四、对于ON_NOTIFY通知消息的处理。) \, Q" b9 C+ w( W9 i
- d. L) T2 Y5 P6 t: K* n+ c
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:) ]! o& l% w) {4 P

" R! u7 V) i* e: f) c+ a! S* m. l! hON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
7 g" `0 K. O- x0 v, t: }  s; Y- H8 z; T
改为
) g. u7 v( W7 S$ ]- F" b/ Z1 K$ \$ ?% S( _& d
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
$ N& a  g$ d7 |9 @3 [' ]ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
- e2 ]: z8 J6 G% @1 R
# L4 G# @" r) s3 S4 s, S2 M  m  v这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:53 , Processed in 0.016681 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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