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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
0 ~. ~, a  A3 w; ^; D( N
9 g5 f: x' o( u- j一、使用MSLU的选项
3 D# q. c+ D" D6 L9 G- ^& H1 ^6 b  i# S
二、调用unicows.dll失败的处理
/ r+ ~% r5 o3 ]; _$ R
/ q' h+ ]% ^: H7 X, u) |8 K三、无法在MSLU上正常工作的函数处理) I1 N0 D4 b8 B$ e
! P, K8 k+ E& @2 Y8 G$ b
四、对于ON_NOTIFY通知消息的处理。
& v! `: E3 d$ e3 @6 M1 l0 [5 _
; F7 i5 E" m. ?, f; w% B& H" \7 z" Q6 Q* K

& D; Q2 \6 G! ^+ ^/ i+ \: f一、使用MSLU的选项
/ a7 L' q. V' D2 a. g6 a) y$ h* {( H9 l4 L- m
MFC的静态链接Release版本% S5 O# {  p0 f6 J+ @! c+ d

- F* W0 ]$ @6 @C/C++选项:3 R' w) n: ?: m
& P; r$ X) B. U7 v
去掉_MBCS添加_UNICODE,UNICODE
5 C2 S+ d$ g& D' d: l+ }5 T# H- M' [3 I  I7 d/ T
Link选项:0 I8 r' S+ k- l6 G( V# l; p9 }
8 G/ I. V" E, Y. H& A  b6 o' Q  w; I
Output->Entry Point Symbol:
7 B. f  Q9 h6 E  _& _, |  I7 L4 i3 y  u
wWinMainCRTStartup
8 c# z% A% I2 d- Y% A; C! C  z
: [8 s, l! `) ?9 \0 x! kObject/Library modules:
* i& P5 D& \, e) S2 Q# C
* ^1 U8 t8 A$ J; 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 / ]: L2 _# w* H8 i  D3 K

' p2 ]& q: Y5 P" G2 s' XMFC的静态链接调试版本:
2 j: d+ O0 n, }" W% m; a- g' Q0 F& J; T) Q
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib ! o- J+ w( @$ L. m; s$ D5 A  g
  S8 p$ |% B) A& H+ Q& n9 z
二、调用unicows.dll失败的处理
4 T6 z- D: I& i4 y$ m2 P! s% v2 F
  h5 |* }7 `) X0 W' C" r( z' o/ b  f! f当WIN98下无法加载unicows.dll时注册以下函数进行通知。+ [, o! F4 d3 L9 i* `; P9 f( r
' u$ c) P' W4 ]: m% [  O* U8 H
HMODULE LoadUnicowsProc(void)/ @" ?, A! X% X( f
{
  \1 k4 `( X+ ^2 j5 d1 [# MHMODULE hMod = LoadLibraryA("Unicows.dll");6 }! b; \0 s/ K: ~+ a: g
if (hMod == 0)( |9 R, S, q' |& n3 i
{+ I* [5 F( ^( g$ U# a
  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
* v" ^6 A3 E, G3 {6 R   "MWP",MB_ICONSTOP|MB_OK);
/ s. r* v- |5 P; _- {  _exit(-1);3 f1 a+ x5 c8 V! K: z
}6 x8 f8 U5 U: v( |6 `, K; J
return (hMod);
- j! ]" H: @- K' H2 |}9 j* l1 ]6 i5 G+ X1 Q
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;( d. T% S5 B* a, d
" K8 b# g2 O: B8 Z' R* N
三、无法在MSLU上正常工作的函数处理2 p+ ?+ f% O+ J% `+ E2 e. |

8 g8 {& Y/ f1 P: Z/ y/ x: z$ q7 p有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。
* J* B! s4 |/ o6 w& o; F( C: D1 G! r1 u- L5 ]+ N4 M
例如mmioOpen
! G9 R, @" W, s" K+ g, o4 C
% ~) h" A) z8 c/ ]3 J( o. X' S! R#ifdef _UNICODE2 \7 C/ Y+ W3 W0 u# A6 _# G5 D: `
if (IsWin98())
* ?5 e% B3 t3 m" ?/ \' ~" N{% e3 ?# _/ V7 v- U% q3 t- t3 n* }
  USES_CONVERSION;
% C7 R) f2 \: v7 `3 m0 _4 H  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))1 C" {, E; `9 @+ @  U0 U$ `' w
  {. L- }  f1 _$ `  d/ _
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
- h2 _- n3 u0 x7 E: X6 e+ G* Q! {9 A3 s   return FALSE;
% O3 Y" o7 T- z: m  }
6 q0 _2 g% v, H- D" @}( x% K  D3 o  |! O1 A' h; B
else 2 P# p! m0 F/ D4 Q
{1 W* Q, B6 H$ a+ j
  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))$ w: B' E4 e8 p; f3 q
  {
9 s/ O' K5 u% k8 U   AfxMessageBox(IDS_ERR_OPENWAVEFILE);
: F, j6 e4 M2 Q; a8 U* B   return FALSE;
7 b+ q8 W! a$ \, F  }
5 a1 _) \6 n  G0 p5 b2 D: q}
" Z& v/ A9 s2 O2 X' }; s9 m#else
& U2 }, z0 N4 s3 q6 L+ vif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
( h; p, b" j+ V/ T{
4 X9 d3 B$ U- R: N8 P. j  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
  ?2 z4 t' f2 T: P* N+ p  return FALSE;
9 a4 O# S9 l5 X/ p- Y, \4 K}
' p' [6 O) T  g% L#endif7 z4 R8 o7 B1 I' b5 t
  z6 `8 H  q, C$ w
四、对于ON_NOTIFY通知消息的处理。
! d# o& p2 c. A3 m5 E- c+ [- s8 Z  y4 t, U6 h; o" w
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:9 h. N- w. ^9 G* @$ w  {* c0 O4 C
2 D6 [' l# R8 Y' Z
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)
+ Q$ X" K4 o1 X+ X: D2 H: e! D* u# B+ `; S0 x- H& _, j; |
改为' k- v# M5 ~. M2 l) Q, M; G
$ f5 ^: |2 w8 L0 D& s: _5 \5 B
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
& @9 ], D  b, Z- mON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)1 K( H! A3 b3 Z, D! Q1 o) j1 j

/ ~7 u, i. K# m! g, ~这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 23:54 , Processed in 0.016514 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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