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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。% ?/ w1 @. t. k2 _0 v& f
% E% W' m! r5 G! k. }+ G5 o
一、使用MSLU的选项
. C7 k- n6 `4 n, E+ r  i4 P; `/ r
二、调用unicows.dll失败的处理; ~* F2 Y9 B  @" f  A
: G3 a0 y# E6 P9 a' q0 A1 p' T
三、无法在MSLU上正常工作的函数处理
: ]; b6 E' G) Y7 H. ]
) P, N! a. Z2 ?( q' t四、对于ON_NOTIFY通知消息的处理。9 I# E2 @1 Q/ U( A4 l
) u" w* f5 K" [2 Z0 T, ?% w
# r: I$ ~" D. g( ^

* u8 ]8 e. ~* [9 o一、使用MSLU的选项! `& C8 |$ b: X# }

2 W, N+ ?# G5 U6 t- lMFC的静态链接Release版本
- n! w2 M  c/ a. D" X5 c" o" Q, Y/ W" `7 L# ~
C/C++选项:
2 @9 X; m) ~. `$ q  y3 p- q0 E/ O/ a2 ]! L: G2 s& p9 v( |
去掉_MBCS添加_UNICODE,UNICODE! _" [. [2 _* L

4 K* l, N( c; }/ F- BLink选项:3 r. b, u7 U3 b9 R1 C) z( M
+ M  w. V/ d/ C$ P+ _7 S# y
Output->Entry Point Symbol:4 \+ w' p) A( u4 Y  R( [# b+ V

8 x8 W' @; ]7 Q$ e8 K# u3 [& L* pwWinMainCRTStartup
# j; i* V' |3 E% l1 }- |
- Q' u9 s  k! B8 M6 J- PObject/Library modules:( ^) \) d5 s+ k* ]! X: |/ O

6 T. e. L2 b# y' B* ~7 w, Gunicows.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 1 `: C' I& l5 x5 n' J1 T9 ?
# j" O7 p5 I% ~3 x7 \" k
MFC的静态链接调试版本:5 O2 Z1 J9 x4 [
0 [% w6 f5 n6 F2 r: _& y2 ^: @! A
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib 1 h" L5 J$ N4 t' Z8 ?' V

2 I0 D8 j/ _' Z0 t8 V二、调用unicows.dll失败的处理
* r  w% ?/ ~) q: r$ }8 e8 |6 W$ ^" z9 X/ |
当WIN98下无法加载unicows.dll时注册以下函数进行通知。6 W1 V* {; ?7 R2 N

9 d+ L0 e8 H) P6 A0 b( DHMODULE LoadUnicowsProc(void)
; {) B  Q0 h# H0 e4 i. Y{
3 T# l: V1 H, V3 u' CHMODULE hMod = LoadLibraryA("Unicows.dll");
) Y3 B; C+ @! X! t+ ]0 i- \- Dif (hMod == 0)
/ O) @8 L/ k! j2 w! B{
4 W' v4 I; n( E" J  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
9 U' @9 {# r/ f, V% v6 Z   "MWP",MB_ICONSTOP|MB_OK);
+ `# N  _- E  G" p% d8 |6 k  _exit(-1);: M  ~$ \" a! v1 {8 M2 B. j
}
) Y! |+ q; Z# M+ Y! `$ R. \& ^return (hMod);
) a$ C) V, g9 o" i6 W8 ^/ s}7 [7 v  K/ D! R2 H; p) \9 L
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;4 Y) ~  ]6 Z* Z1 y

8 f7 s  L" O* @三、无法在MSLU上正常工作的函数处理
! i/ _" c2 l! @8 }5 o% c: [+ ?; A* {8 b
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
- v/ C, F5 U; q# T
- W5 h. Z5 V* }/ \. f8 t5 T1 X例如mmioOpen+ A, h9 B1 G; U

5 h' q5 W9 ~  z; u$ O6 |8 p7 i#ifdef _UNICODE
2 b1 U6 k/ i# k8 u2 tif (IsWin98()), q/ W( L3 z9 l1 {* z
{
' x, [+ u2 X4 z. C; D, o  M  USES_CONVERSION;
9 u+ g2 `9 V& u$ I, d# O( n  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))  F* B2 o/ N7 l$ }
  {
' o, e; [, e0 r   AfxMessageBox(IDS_ERR_OPENWAVEFILE);1 y8 q/ C( T% Q2 `- S) }
  return FALSE;/ I' d& _* W. U
  }* l; e+ ?1 u. [0 F- I
}
6 b& s( b- R/ E" Helse + i2 G. ?; c. O! b  Y* |# E! d
{
4 A/ Z2 n8 p6 z  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))5 D) _3 J5 l( @/ M& M) w
  {% h* ~7 X  F! s% _- S! H$ ^  Z1 p. M, b
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
9 Y' J: I7 O- M* `- u: C! R" W   return FALSE;
0 B0 j5 F7 j9 V5 a& y  }
3 s' l( h- ^: F$ A; V% Z' z}
* u# L0 A0 X( c! e3 |1 h+ |# Z0 j#else1 ?& ~+ B" _! n/ b& d' V$ l3 V1 e
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))* Z- e9 I) q3 W4 Q. g8 j. _# d
{4 b1 i& P) }5 e6 _
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
3 s  \, r# K0 |3 H  return FALSE;
+ Y: K0 R4 r* l3 x}
" o& v0 l/ X% o#endif
7 w7 |) Q( l- k. m" w
4 w9 w+ A/ C' A四、对于ON_NOTIFY通知消息的处理。
3 R3 A9 h- {! z+ e
0 O$ K% e" E: V2 ^" ~$ F0 z2 y对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:! z8 E, i3 u9 k7 b# ~3 V  i- v7 }; J
5 k( R& p% _6 ~5 c$ h! d
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)! [2 s0 ?  {4 G5 m! `( F

/ u! `- d1 v/ ^0 u改为
( `0 }7 @  n; P! i
+ I. x: Q  [5 j( N8 j! uON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
% C( j  q1 p& w- oON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
# f* U7 W+ v+ z5 X4 v2 {
. u7 Z3 s% ?; }6 H这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 10:27 , Processed in 0.033870 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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