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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。8 v4 T* y- y4 ~1 \8 _) I2 o
' X2 J4 H5 E1 |3 O+ V3 S+ \+ m
一、使用MSLU的选项) ?! ]% D2 c1 B# R8 a

% t- A+ W! l; l, ?2 d二、调用unicows.dll失败的处理
: u2 h; T- m3 |3 ~) c4 E. ]  Q2 @- U. G$ @! o$ ^" v, [+ b1 s
三、无法在MSLU上正常工作的函数处理, Z6 N( D* V0 V% |: Z. v6 i* t8 }

  Q/ k0 t( b+ N* I" M$ {四、对于ON_NOTIFY通知消息的处理。
6 C$ {* F0 _; k( Q: T" s/ ?1 t$ o; v4 |' U# M- x  B6 F+ U

) _2 K2 r, e: _+ y, r: \3 X6 j# f2 T- v
一、使用MSLU的选项8 K, J, m7 {" ~

/ g$ X* K* p* e6 K9 F* _4 IMFC的静态链接Release版本7 K. F8 A. {3 e
" A6 a1 [6 M: k& G. q  |
C/C++选项:
& [  z2 _" K- @; y( e  R! t$ ?. @" `- v7 C3 t) h& g& G
去掉_MBCS添加_UNICODE,UNICODE
" u, }. _# N  r) m" k0 l( }8 u/ z# L  B7 p
Link选项:4 ?2 M3 t+ }/ u" a% K9 q
7 f& v  V9 {% F+ P& O2 J* S
Output->Entry Point Symbol:& h9 r) ^* Q! @1 r
; E  X3 H5 [. g0 O) S) `
wWinMainCRTStartup- u( B& G8 _3 R6 C0 c' S4 T
, e% D. A, ?5 P, p2 Q' b' }+ o
Object/Library modules:
$ q5 @2 r' l4 `3 P+ N# J3 }* V% j9 E6 O! O
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
2 j2 }2 x* M2 n! D4 D" i7 ~) U
$ P  X5 e) [4 i$ qMFC的静态链接调试版本:, }0 o3 }1 P# `8 k
3 a' W" c0 A, o& o" N
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
, m* _0 Z% X9 W, ^0 S8 S
. A# u- W0 n* n/ I二、调用unicows.dll失败的处理- v0 D. E: \# n
' c2 w, z- X0 X# @
当WIN98下无法加载unicows.dll时注册以下函数进行通知。5 J5 H+ ?6 _/ {$ W9 K8 o

7 \7 p' u0 z- {; T. Y8 P2 `& u$ m$ sHMODULE LoadUnicowsProc(void)8 t, r" w& n0 D; N' E0 |. b
{
* @5 f3 O5 [0 |1 @, X# E% IHMODULE hMod = LoadLibraryA("Unicows.dll");: F4 o( a  S# L$ m. v
if (hMod == 0)
4 u2 t+ z' w6 _, w5 w+ S9 M{- J$ k, Q/ v1 S" k$ h6 g/ o+ o9 p
  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",& D" ~7 k5 a0 ]$ X2 l
  "MWP",MB_ICONSTOP|MB_OK);" C; q; R# W: |6 x& d0 a- }& S
  _exit(-1);
' l  q/ ~1 t# a( b. W}
  i% i0 w0 o+ E( Q; @* areturn (hMod);$ z# E& n& c7 _
}
* n& K& c# C$ n7 E7 dextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
# v0 o6 V: I' T  K
3 j/ E# ~5 x! a# y% E: @9 d三、无法在MSLU上正常工作的函数处理8 _2 c2 j5 N( s- J* Y
' X/ B' m# v" I1 m
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。" t7 k2 c; O/ R" ?! }- t' z  d

( E2 n6 F' I7 R. g1 N例如mmioOpen
* i& j. d( l' W9 U; w: q3 [: [( k* \. I$ V' Q
#ifdef _UNICODE8 n1 ^# ]5 N- i6 M
if (IsWin98()): G# `& l3 b3 c# w
{
# M& c, U8 F7 Z2 w  USES_CONVERSION;
! G$ P: _1 B/ W9 q8 j( H% P! t  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))6 v/ |0 r# R0 b6 {
  {; @# m" q1 t9 c9 X3 J8 K1 z7 O. z
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
0 @7 ~4 l6 y3 T   return FALSE;
* v1 w9 p* }1 ~* k  }% G; C0 t- k4 o0 a5 O( o
}$ m- Y9 z, X; C
else & \, V! j- h# ?
{
5 l/ b" E6 a) _  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))! d8 d1 I6 A$ ]( ^! g
  {
4 T& Y5 p6 u" D' d6 Z+ |   AfxMessageBox(IDS_ERR_OPENWAVEFILE);
; I5 |! `; f1 b* v# r9 l   return FALSE;& H: n" o/ G! V+ ]  d+ _5 x% W) o4 _2 K
  }; V7 A) L( B$ C% m4 [* ?; g
}
: Q2 A5 ]/ S! ~# ^# H; m  P2 j#else
" X0 {3 Q) l2 H/ z( Oif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))5 t4 ~8 V$ E  x& |6 X: \; X
{; `5 J& n( V$ q6 v& I0 D! X
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
4 ~- x: v& I' r  {  return FALSE;
+ ^7 @  V1 a+ {' ~* X7 U3 i; g  A7 L}8 G2 T, O5 x( x, @  h  K4 R* n
#endif
5 v  w' g; J  B, m  A9 u* A6 n3 @
2 k5 P/ [  H4 }0 s) }" L  W6 R四、对于ON_NOTIFY通知消息的处理。) w4 F9 l$ s5 s

7 K: ?6 j6 B7 v& C对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
  f: ^: m7 |! I) t9 R. h1 P) R. K- @3 T
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)6 h- \9 m' C) M) \+ }9 m
, O: @8 @% u; R/ c
改为8 Q! F1 y$ m4 P$ Y) F" B* H

& O. \3 P$ j: I' T; {ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree): |  I' Z$ k6 W8 m* g* H
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)" x  w; @8 M6 Q

# @' B* i6 u# w- X8 X; E5 {6 J这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:41 , Processed in 0.018187 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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