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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
* y2 @4 d, c4 Z0 x2 s6 A. [# E+ m# Z! u
一、使用MSLU的选项
3 R* ?" s/ t# a1 U; {/ y$ T$ u: ?5 k
二、调用unicows.dll失败的处理
5 g8 y1 H" W0 T/ z' n+ ]" z% ]5 W
$ L7 k  U6 x9 h0 q7 [6 T三、无法在MSLU上正常工作的函数处理
( A6 u, s/ c: G8 P4 P' z9 w5 G7 o2 M. Y7 ~4 W7 q
四、对于ON_NOTIFY通知消息的处理。: o6 W) [0 C. j# X9 F; `
! f& R! o8 f1 }9 N; I6 w8 Q

  q$ T1 C7 {# v' O' \6 _( ~! A  H& p' Z1 _4 N! N, t# c
一、使用MSLU的选项
2 E1 [; U, O8 m; @+ R3 |& k7 f( [  y- }$ @: M8 ~
MFC的静态链接Release版本. A  h1 y3 ?  x& b8 {7 d; A3 o6 t, O

8 A* v3 o  S. [- O6 Q, S9 {) ^C/C++选项:$ o8 S+ d3 A% @: B3 O$ x, b
# M) @1 _9 c9 b+ h
去掉_MBCS添加_UNICODE,UNICODE
, m2 z! ~5 G' f2 s  Q. @/ R% y- E; [) Y4 ^! f" e; T
Link选项:( w0 n7 Z; w, R& ^

- r0 L. R3 K7 |) U! cOutput->Entry Point Symbol:
" V3 h& a% i/ Q8 k" X. v
) m( W0 ?. m  R; }wWinMainCRTStartup9 b! h0 P9 q9 C- o& g# z0 H6 ^
1 {9 H4 {* J# {9 h. ^' P4 y
Object/Library modules:! U5 P) z, O8 p6 w* k2 J5 R7 {
/ j2 V7 O9 w" P* ]) o( Z
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
. z. S8 F+ V& }) R- \" F4 o4 T' k
5 V- H! T3 d( ~( dMFC的静态链接调试版本:: ?$ o: U9 P7 @' H5 r

4 _" O' B1 A+ gunicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
3 N% }  I8 M  `7 h8 P3 L+ K/ p1 x) q6 U
二、调用unicows.dll失败的处理
- r! b6 Q2 n% q6 k( h! T$ P3 U" |1 T" G9 g: }% n! z  O
当WIN98下无法加载unicows.dll时注册以下函数进行通知。# Z  e3 }5 j8 f: o, \- w

6 U$ P; Y' D3 C6 G9 D" w# L" DHMODULE LoadUnicowsProc(void)4 I+ M, R# @# ]3 L; d
{
! V1 C% U6 P4 L) f6 q5 B+ FHMODULE hMod = LoadLibraryA("Unicows.dll");
" \$ Q1 t4 R9 q) L! Bif (hMod == 0)
3 E" `) ~$ M# t0 x- b{: Y, z: `$ S+ m# q1 n+ A
  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
( @3 w4 h$ ]! w   "MWP",MB_ICONSTOP|MB_OK);$ |/ n( k  j. r! p8 M
  _exit(-1);
7 b6 Z# _0 D6 R& M/ K/ p}2 |6 }& Q, K* G! L. Z
return (hMod);& J* k& j- _3 e4 x! m- C* ?
}
/ H0 h' h. E& f3 H) N% ?( {" cextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
' m% Q! z9 c- e& [% s! J2 C6 ~4 F! G  E2 k/ t' D/ v! a
三、无法在MSLU上正常工作的函数处理
8 d+ A" m) w# @/ ^7 x# m0 B! X! m; Q" w# a# c* [# H. N
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。- ?' R1 J& D. n2 [( O; {" X1 e2 u

1 E  f# O6 D9 h' h% h( O  R例如mmioOpen
, t9 n8 K: N" D
- [& j1 f5 y1 C  a2 {#ifdef _UNICODE! Q% M9 h* ^* ^7 u+ v9 c
if (IsWin98())* c1 A) g7 w) S; J
{' `, H8 N1 f8 V. s) f
  USES_CONVERSION;
: t7 q3 i9 I. ^  ~  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))* ]7 V' U( i  a5 K
  {# ?, m# T- E7 [) L$ x# X2 g9 X
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
! f$ s& R/ r) O3 g6 o/ S   return FALSE;2 e- w1 Q6 k3 w$ m
  }, P  }" w1 }/ u- A8 U* T
}% j1 F$ D& ~: K/ z  |6 i- ]
else 1 e  B2 o+ y2 [) l
{
' r4 Y  I5 c3 {8 ]2 R  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
! Z- C5 b1 S2 A- Y. W: v  {* y/ F" y$ x# I
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);) G9 r9 z' A* f9 ]$ u
  return FALSE;
' l/ G# P9 n" c/ w  B+ \  }1 ^1 {+ Z# M2 Z1 a3 C% a
}* V2 H) ^$ n! h
#else+ R* B. G  L/ b; T
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))7 L! ^( s6 }4 M* m
{* p- M" V7 S) Q! D* K7 S. p! A
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);$ L/ I: L$ Q) k& Z# I
  return FALSE;- P4 X% l/ H7 p
}
/ V3 m" i/ ~. O" v& P#endif% v- @  g: w* G9 \* A

. [; L6 i+ c4 ?2 _# Z四、对于ON_NOTIFY通知消息的处理。4 W) w* j$ d, U& Z  D, P9 [/ I

0 z( t% s! }: y* X对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:
/ h- p+ ~  w9 l4 |0 m# D8 C" P: w& X! M
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
4 S8 e8 k5 T# c3 b/ I  z. Q5 g3 X: b" c# q) l, ~
改为
$ ^' F7 z7 b) f# v5 m, m9 k: Q, U
: l, n/ M0 O* ~2 R( B, X' L% kON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree); i! B; s9 n) ~( p2 L4 ^, |- K
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)
9 c/ P. B; c+ J$ c4 D! {9 F5 [: x% l: u" p6 N/ W
这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 01:33 , Processed in 0.016934 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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