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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。( [" {& M- e, x0 F2 R

# Q$ o& s; u. [" l: E& P8 v一、使用MSLU的选项
2 T; F' {* u$ w1 h2 I+ a$ R- t8 G$ h# ^% `" C
二、调用unicows.dll失败的处理. c- b. X9 W* @. e0 R4 t+ E, p

2 K4 e7 l& E: A' i三、无法在MSLU上正常工作的函数处理
0 K# n" g3 m; ?6 L' a5 b5 T* v7 x" |+ c: S) U! O. P  ?/ s
四、对于ON_NOTIFY通知消息的处理。& u! M9 r' T3 n& n
% N  ~* C( x+ D! n. t8 _
" ]& A3 n% X6 O0 b( y1 p0 F

- F) Q7 t* J* `6 w% m" b+ o一、使用MSLU的选项
; P9 X+ K; S, l* C4 S. E
4 k+ e4 |" B- P5 WMFC的静态链接Release版本
3 M* r0 j& P/ c, ^6 w) {
$ [: F- e4 s3 B# B( TC/C++选项:
8 g/ s7 Z4 w% ~- k; P
% P" Y3 |; }& h去掉_MBCS添加_UNICODE,UNICODE; I5 H' y; `; D, c
! v1 u! P# V2 h" s1 v7 M
Link选项:$ l8 J2 R0 h$ K1 T" J6 W& ^0 L
- m! I2 d" y* a5 V
Output->Entry Point Symbol:
. ]! Q1 `. r- j# y5 E- K9 G
( {0 z& p# f  xwWinMainCRTStartup9 i, _+ u: s3 J

6 s8 ?0 ^0 d% H# i+ [Object/Library modules:
6 i5 z. B2 Y' _- z& i  C, |/ b8 P# u
. r$ T6 k5 p" \6 f1 Punicows.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 , b: f5 A* o* w+ T7 K, u

1 w- ?) Q" f: F7 }MFC的静态链接调试版本:
: t+ H) V  O* i0 C  e
! {: Z- w2 O$ Junicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib 9 _8 s! j5 L8 L- B( \; v: t( P" R
: h! M. k1 G5 I# ^) b3 A$ e4 C
二、调用unicows.dll失败的处理
2 F$ d9 N  d' l/ J4 C! Y4 O3 I" M# P3 j/ v/ c* B' L5 C
当WIN98下无法加载unicows.dll时注册以下函数进行通知。
$ r1 _  u2 C0 S  a
0 J# p5 l/ x5 v  K& m% Y4 BHMODULE LoadUnicowsProc(void)
; @5 x( @) F9 l; o{4 i& s  z3 |0 @) ^5 ^1 c9 D
HMODULE hMod = LoadLibraryA("Unicows.dll");- V% M7 g+ @( p
if (hMod == 0)
9 |0 {6 Q/ a9 C/ N' X( S' K7 p{+ B1 K9 Z8 T+ w% L- N! W
  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
5 p, u" Y& a7 I% {+ [" G   "MWP",MB_ICONSTOP|MB_OK);
& o* M1 R4 y2 ?1 \: t  _exit(-1);
7 @7 P9 y) ], H0 X4 L0 ]4 c}
8 S- z; |1 X9 s  M8 {- ?' k3 b' xreturn (hMod);- K4 i7 ~# G2 p) E
}- I2 y( ?: D5 y. E1 R
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
- e+ C3 S  `1 s8 Y3 ^. @: {
! p. S! l" b  \- S; A% w  q2 |- f三、无法在MSLU上正常工作的函数处理
  e/ d/ H( P3 S6 k
& q; a, G$ k$ U7 ^! m有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。: F7 F! Z! R# u5 B2 ]! z( P1 a. Z
" h, `# [  r4 h4 k
例如mmioOpen/ O+ V8 \$ z! [: r6 f- P

' {: {) k: k" }* Q1 j' ~( D#ifdef _UNICODE4 Q  R7 E7 L+ b0 U, h+ s/ `: B, c
if (IsWin98())3 n( R; c, A$ z$ y- Y
{$ U1 s9 I: E* }  |: Q
  USES_CONVERSION;
5 J2 o, \2 S; q1 [6 E1 j  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
/ X. J5 |0 C5 Y: ~- `) _  {: ?0 Q( S0 p0 r- `, J3 ^( a
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
  u2 S. J$ K' e! T   return FALSE;  B! f# W6 `, @/ A; }
  }
# w1 E6 o" n# I% {0 t}
+ D7 {2 s5 L- b8 i( Delse 3 s6 L4 U2 K/ ]# i# v
{
4 q4 }5 ?* Y! r! `  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
( ~& r: t3 C+ B; W: B  {
/ p* A3 q7 V+ h   AfxMessageBox(IDS_ERR_OPENWAVEFILE);2 M1 s& ?- S  t9 R9 F2 F
  return FALSE;& k3 B& J7 j8 x' h! E
  }
+ E) u: ~5 O; `' f9 W3 w  ?}
/ z6 h3 _; O* W* m/ X; S8 M4 j# M#else, D; b8 j$ m8 E  O& s7 Z9 C- S
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))' N8 y, u* I# g' P, q" a
{
2 r& I) D! x& n' J1 K6 ^  AfxMessageBox(IDS_ERR_OPENWAVEFILE);% B" g/ d* b) u
  return FALSE;
. F; R4 e/ w, Y# I5 Q$ }}5 S8 [) r' J) G" [3 t, V7 V
#endif) ^- s; b- \+ S3 D- Q& h( u' Z

7 m, G3 z: |/ R4 l' T! X1 v# {  b, C四、对于ON_NOTIFY通知消息的处理。1 E* p+ o9 O& G4 q1 r. Z

. J: ^6 z% `* j) k6 K8 Z1 E对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
3 c+ A6 T2 N$ j' I  |8 r( C; T! a
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)4 f' P" g: C$ `: L- p

- H" u2 i/ T' q/ {+ E& g9 ]; [6 F改为. ]2 U$ |# n6 C6 J0 b8 D

3 R! A% z5 i+ m9 Q# [( {ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)+ W/ K( G8 k6 D, L) u0 E
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
5 J, A; b" w; r4 |+ |
4 d& g2 A6 t: w5 s这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 00:20 , Processed in 0.020833 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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