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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
. ]3 i  t* j, p( I! |# U* E1 ~, \3 i) J6 w% L9 J4 Q
一、使用MSLU的选项5 j# z' `. q1 U) W

0 ?) }# E& b, V4 d9 f( x二、调用unicows.dll失败的处理
6 d+ X& C% h' n% r  }$ q( J2 C$ z" [! Q! N8 S0 p+ m
三、无法在MSLU上正常工作的函数处理6 H$ p4 `) X# U* U! W9 n$ J

; `( F' F7 ^( i# N( E四、对于ON_NOTIFY通知消息的处理。
- w& k: d0 [- W0 k: y9 w9 M* @* s
9 V; |( k/ m2 s/ Q7 H: D0 L+ g
2 c' i6 r' u0 M( i5 q
一、使用MSLU的选项  m6 M: N4 N2 t% X+ _9 `0 w# O

' }! H# h' ]/ n4 Q5 RMFC的静态链接Release版本; [& a7 W5 |+ u! a1 V1 Q
( M& c: q0 `5 f; F
C/C++选项:: O/ u) N- d! w" E! T
4 I! h( i/ R- \
去掉_MBCS添加_UNICODE,UNICODE
7 p+ D/ Q* x0 ?8 R+ Z1 o$ f6 @! A! ^5 |+ J
Link选项:: x  I) q6 {9 x4 `8 A

7 W2 X6 ]6 P$ P7 `. m! @Output->Entry Point Symbol:. R# P: a1 h! x3 }1 Q

' N0 @5 v4 V! j9 B/ ZwWinMainCRTStartup& h% Y6 \( B* l; [$ O8 P* O

2 e, k) _: o: T7 t( r/ G' aObject/Library modules:) G0 A- Y4 S6 O# x8 j6 V6 G
* q; I7 O/ H4 A  ^, m1 K4 l
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
* R/ h* j9 d: G0 p, [- L" P
% u* P; H6 |/ xMFC的静态链接调试版本:
* X7 S" \. e7 X5 h* [: x9 F0 ~8 X# M$ @1 P1 @8 `
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib * @% U% J# X6 _+ n0 E+ A

- e( R. o: a. {; t/ m二、调用unicows.dll失败的处理! Y- u3 N7 V, \  P9 Z  a! w" @
0 |4 k4 I; M* d0 g
当WIN98下无法加载unicows.dll时注册以下函数进行通知。
' n; N  c/ S* ]4 b: Y
- v% s9 z# h( u, B: LHMODULE LoadUnicowsProc(void): e# `0 `, W. Q2 s9 i; h# U
{
# z* Q$ g* s& M% S5 oHMODULE hMod = LoadLibraryA("Unicows.dll");
/ A# a5 J$ B$ C% q# j0 y9 lif (hMod == 0)
" P' L! ]7 v, v! h8 y{
1 p4 j0 e& Y4 M" z' u* p- [  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",, y, a) f" `& W* i$ o
  "MWP",MB_ICONSTOP|MB_OK);2 x8 U) i7 V: Y) g5 v; e& t
  _exit(-1);5 E" S. A$ b% a# x; f
}
5 v0 U; A% y" v6 d% o! M/ {( ~return (hMod);6 l) Z( u# i3 ~. O
}( d7 T  J2 h6 x' R+ O  y1 H
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;5 ~4 j. T1 B+ K% x6 J/ x  x) j

. f# C% C+ a% ]9 a三、无法在MSLU上正常工作的函数处理' E# b1 ^8 J! @' m1 G% F
3 W2 R4 w2 D% B3 U! J5 o3 d6 R6 Q
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。5 Q, L5 K5 \/ T5 C8 M

! T( I6 _5 |7 B" E' O! l例如mmioOpen9 ]- g) `( S. L: C
$ a/ [  x) S# ^% Q
#ifdef _UNICODE
6 n3 [4 H- [7 B9 {if (IsWin98())
: J3 P; d, g" j! |{
# k5 T& D2 x" {( e, U6 K  USES_CONVERSION;
9 k# P% `: O$ z- n. Z  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
: Y1 _& }3 O& c' H# R  {
- d, \! |4 r- G& B/ C; ~   AfxMessageBox(IDS_ERR_OPENWAVEFILE);" B( V0 P3 ?7 V( u! t  n/ w! `" c
  return FALSE;7 s) M8 I, H" c
  }
  R4 @2 h* E: B  c$ b}
, U- |4 i" G* A4 r' p$ Felse
2 M5 f* J% p/ S' G' V7 d* p{% W1 c+ g. B3 r8 v
  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
9 A" J; C; C* ?) Z& S) a5 ^! s  {3 y, x- A; w* b8 y2 r7 A( q
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);9 K) Y5 [7 X& z: a$ z1 S
  return FALSE;
% s4 g( q- u7 P' N0 u  }3 N8 j5 D5 s% ^9 `8 S
}% x4 h. b) K. {4 Z8 p1 _- F( K5 {
#else
: z4 X7 k/ [$ [$ }$ _' sif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
/ ?6 n0 i9 B$ V. q- y9 P$ w7 j{* G6 p7 e, D! j& G- x6 t8 K
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
1 ]9 _+ a" @3 l  return FALSE;
8 P3 B# K& h6 X( @; \7 j0 P}+ O' N& A! S8 g. E
#endif
3 z. W; K+ N* @; L, a$ ?+ U1 e& t: N  i! c
四、对于ON_NOTIFY通知消息的处理。
4 @; E1 n" a7 z* q# g1 F3 |2 @4 W; B, D
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:9 W$ g6 R# Y, I1 g$ R/ Z6 [4 N# B% T5 M
3 k4 @1 v1 F- }; _# ~$ q) M8 G
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)* }% X! `  q' h4 A+ P
3 O( Z- C1 O) ^* W* e& e7 r
改为) M- ^$ Y9 }0 M! i$ {1 s8 \

8 v7 x; m3 y0 d  ^ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)( Y+ H  k3 g" d! X1 c# x* n
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)8 G* \6 m9 ^( m7 e! P4 h7 I

. \1 U- p' g, k- S这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 08:01 , Processed in 0.035222 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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