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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。9 Y1 N$ X! f0 R* b

0 q' o! K3 N2 I# W/ [4 \4 u: N一、使用MSLU的选项
; r9 a( g$ a- z1 N" {$ W+ W" S
1 V) Q3 ~- A" q二、调用unicows.dll失败的处理
, e7 d3 S4 P9 i, Y, N2 N5 Q) B5 j# X$ p3 |9 @1 {( t. w
三、无法在MSLU上正常工作的函数处理
6 i; R' Z7 n7 o* o0 t! y& G
6 ~' Z" s: D! R& s7 Z四、对于ON_NOTIFY通知消息的处理。
2 ]6 \# a- s$ R$ i+ i
, i8 K0 }* W3 F4 v/ m% Z7 E
: j. g9 q& p) ~& w# d. @3 M/ k: U. I0 X; T$ H4 D+ N! L
一、使用MSLU的选项, s7 q# j$ e. ?$ j' K6 ]0 v; B
: s; j# F, J; u) i7 P  s0 y
MFC的静态链接Release版本
4 M( D" c% V& t# z6 V/ ?9 N5 ?6 L6 K6 ]1 u: w7 A2 i+ Z6 z  d
C/C++选项:8 D5 p  M) S% Y% O& e
# b+ O0 w& h6 u! B6 s( x1 C, z
去掉_MBCS添加_UNICODE,UNICODE0 [$ {9 ~. }! K( P

0 h; z/ O  b$ N6 K# E! L) b) z; x1 yLink选项:$ s2 ]+ L$ s! {- n3 U( }* b* L- p! ^
% I% u) j* B. Y. V1 _" N! F1 H) ^7 U
Output->Entry Point Symbol:
4 A. g- m+ a2 G( s5 h  Z1 L# [
1 o( _! t! @' q  D/ ?wWinMainCRTStartup' m( n  g2 {. z  v3 o) g

( a. |, U+ z  ]/ {. UObject/Library modules:% T( ^3 k% G* j" @5 M- _2 S

  v( a4 @3 U" L3 E) {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
  g/ Z+ c1 Y: L4 _
9 @+ ^* z2 t: mMFC的静态链接调试版本:/ n1 G4 n, Y8 W) E& F
- w9 i5 a- [: x" h6 [
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
3 \7 A8 X# v+ G2 j3 k, X
! R7 L% e4 y3 k. y" l; {6 r: F  L. K二、调用unicows.dll失败的处理" F- u7 U. Z% c$ Y  g( b$ C7 O
0 s( d( t( ^4 v$ l; X- m9 }% v8 c
当WIN98下无法加载unicows.dll时注册以下函数进行通知。( K2 D* o) C& q! T. f# z  B

5 B# |# Q2 E6 D+ v6 I* S+ A( rHMODULE LoadUnicowsProc(void)
' `+ g6 o& U$ ^, R{
2 \1 o  x. A" q1 V# R% {HMODULE hMod = LoadLibraryA("Unicows.dll");
1 j; r# {8 n# Jif (hMod == 0)
: B6 Y+ C$ `' |- e{
( g9 \( K( x, k, ~  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",) L' x: ]+ V- \' U
  "MWP",MB_ICONSTOP|MB_OK);2 S; k& U) l! s6 s4 Y. E/ V* N; f
  _exit(-1);0 n4 q7 v# W& n' ^$ e  }
}
8 s3 u5 w, P8 L, J( Hreturn (hMod);
- P5 O* G' V9 o2 w( D}5 q# B5 u5 u$ ~- l: a& s" p2 @
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
* j7 Q) k& c; t6 O& L" V! X8 Q# f+ @4 ^
三、无法在MSLU上正常工作的函数处理
/ V! _5 R3 U# @; r" V1 O7 [
! b% z$ h* Q, w有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
9 U" a) |# v  I" q0 q$ s
6 M: W. {6 ~( ]- m4 H. ^例如mmioOpen
1 D3 Z& v  U7 e- E
; U8 u! I0 t# D/ a% h' T#ifdef _UNICODE
" Y" K5 `! ~2 n8 f- J) B4 Rif (IsWin98())
- E1 @/ M! K9 a: F{9 w: T4 j" G& V, l1 h4 R3 u1 z
  USES_CONVERSION;$ F- O3 {4 Q. I( o5 x( n- v9 r
  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
" n* W/ F8 a2 i; s5 Z  {6 g/ A2 |% c4 R! ~
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);1 e" B8 a/ _" f8 c
  return FALSE;
1 v3 T$ W3 L  G  }
* S2 I  A3 }8 I; R}$ E$ H- A  E5 X: ?+ p
else
) E- Z$ S$ ~) O{
$ g6 A& a8 Q1 V& U6 Z  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
2 b# _6 S1 D- }  {8 |. c( K1 s9 U& {7 g
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);' p5 w+ O9 a8 x; E/ Q: ]
  return FALSE;
& b( B% _: @2 R# k: Z  }, |4 q  k8 Q) R" M- F' N
}1 ]+ u# i3 i8 H  e0 h
#else
1 r! s' e2 k" K# C' o2 m% zif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
- D1 [7 Z/ \' u{$ u" T' ]- e- M
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; \( I$ P) W7 t/ x- }9 {/ ]& `0 m  return FALSE;; @3 U; L( a  }: s
}) ]7 v8 R) V+ @
#endif7 t3 z- c) y0 E, C$ `4 ]
. G6 g: v0 ]6 u) [: D7 T
四、对于ON_NOTIFY通知消息的处理。
, d+ M  u% z" u% e6 P  b2 f. a) v1 ~# o1 q+ u) K) l: @/ J
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
# k* M9 U! O5 X- ]  g* c3 ~# l% o( v/ ]
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)* X& P: x7 Q# i
' t: ^5 p5 t7 I" l6 y
改为  i9 f7 A4 f+ [) N
7 _2 B* |2 `3 h1 g
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
( O+ m5 Z1 X/ y' b5 l( w) hON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)# |8 |1 m7 X! X6 X- }1 l7 E

* g, ~9 m% }+ B" C* {0 h+ R1 I这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-13 11:53 , Processed in 0.016457 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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