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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。
; a: l, N+ h$ V- y/ g6 X; _( J0 z, p- ?! }/ D2 P
一、使用MSLU的选项
4 t: ^5 a" A7 U( _2 p1 V8 Z0 h  x" p) m, ^4 @4 I0 B" J& ]! ]. {
二、调用unicows.dll失败的处理
, Q; H' U! z/ b9 Z
/ g% [9 G* B9 Y; B( E# G三、无法在MSLU上正常工作的函数处理: n7 h" S# c% \; D5 P8 m$ K

3 b, y9 G& I9 H9 E" j  L四、对于ON_NOTIFY通知消息的处理。
; ^* u0 M# a% r) u- x* N8 [! z
8 Z3 u1 z5 m7 n) O& {% t; C
' h/ p, [4 B5 X/ F$ R4 \. S5 j' U, e/ R* e5 U
一、使用MSLU的选项$ S! z. S$ t3 F! V+ G

5 o+ f8 r0 s0 S) e7 s: t0 KMFC的静态链接Release版本
3 G. ^# l2 F* ^/ h, Y
2 T, i# p6 q: S, i- H/ n/ i' KC/C++选项:
0 d2 }+ J7 T, u! {- s! g: D* }
  N" Z. h& f* r- i: k: N+ S% A, D去掉_MBCS添加_UNICODE,UNICODE+ H+ A/ V7 M$ ?! f9 @& z8 j' L- E

3 q4 I: e: W2 cLink选项:- |2 \$ Q& q- ?( |3 q) o

' }) a2 O$ f8 r& ]7 zOutput->Entry Point Symbol:
, |# C3 i. j6 [, x
! u. N) U0 ]- d7 v" hwWinMainCRTStartup
  J  b& V# u) i3 K  q- S+ P' f5 C4 n4 B: Z. P6 V( ?' |# K
Object/Library modules:
. D8 L. @) g: N% _$ z$ r9 l; N# D) [  c5 k3 i4 l4 m( B) I
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 / a( I0 }# M2 Q* J. E

( U/ z; c4 q1 d1 qMFC的静态链接调试版本:
8 f  n6 i' ^4 K. r/ \0 `' u2 r8 E# r# z8 l$ ?6 K
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib ( [9 k3 `, ^: c0 A: ]
/ L( N  J! g) |1 S. d
二、调用unicows.dll失败的处理
8 v) y0 [' [" \
# t, r  j2 g6 U; `& I7 j5 f当WIN98下无法加载unicows.dll时注册以下函数进行通知。
% ?2 T9 _& c" x# L8 u" t  [
% ?' H, n' v7 {& f2 H9 V7 E* i# JHMODULE LoadUnicowsProc(void)
) {( a3 `9 T& v{+ Y( N1 U8 r  H9 C
HMODULE hMod = LoadLibraryA("Unicows.dll");
: k" v1 _& e2 R5 i: I; [3 Aif (hMod == 0)
% k& X# S5 }0 ]# ^+ J$ W{
# R. B2 ]& l$ r( w5 X; j  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
: c/ a! V( a+ q; d# g. P7 t$ |8 x   "MWP",MB_ICONSTOP|MB_OK);
7 a7 o; o% f8 K7 _+ e: A  _exit(-1);. T5 U# |) ?# N$ q! y
}" C# h8 e# I% b8 M) Z4 Z1 V
return (hMod);9 x5 X; ?4 s% K3 ?
}7 ?1 R0 }0 ]7 O. m- M
extern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;6 C( M: X9 h5 o. U+ b

: V( F8 O# C  j$ L! Y9 l$ m1 B' L# b三、无法在MSLU上正常工作的函数处理$ j/ Y' u' R/ @# T, y& _! u0 V
7 r  B# R- @2 R3 y# Y
有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。5 o2 h+ l! c* L5 _
0 V5 Z9 L+ o" t% H
例如mmioOpen
- x  M: @7 \! {. x+ b& {
# E  Q" l3 y# ^3 q#ifdef _UNICODE
6 n9 I) K% R3 |6 g: G+ u2 gif (IsWin98())0 E, i# I( {3 i; y2 S1 j
{
+ b' F- J3 r! B8 S" y  USES_CONVERSION;
' P+ x0 T; t/ x. O6 v7 R  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
, L) i. q0 G$ u  {
, ?" g3 ]9 t2 ^6 U& Z/ e   AfxMessageBox(IDS_ERR_OPENWAVEFILE);5 Z% n: q& O9 p; _* ?
  return FALSE;
- `* M& b! t" n8 C7 |1 h  }
$ W  ]  B' [( B* v" Y}* V$ y3 \# t7 \5 L
else
, D) ?' a$ ^! ]4 E' a{. V2 s1 m: i7 y! V, U9 T: Q# F, X( F
  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
$ y4 R3 o" \- j4 @, H  {# w$ F2 Q4 z2 K0 x
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);" X8 D: V6 b7 u# Q8 L! M
  return FALSE;
% C8 M3 T6 i( b  }
/ F: w, T7 G5 d  e}- v0 h4 I. p7 t- U1 b
#else# |1 G5 x/ s* Q, A: N# |
if(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))
) r$ T9 u; k  ?+ H% I{% i; `" Q0 u# f1 w  x) s# d
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
/ d2 E) x1 K& [2 w  return FALSE;0 [# }% h" }$ q9 l) D0 d
}
& \; k% ~1 E( E- ~( U0 K/ M#endif: U9 p* o  f0 _# G$ M* ?: C
% [0 `' ?1 n( E) k, e
四、对于ON_NOTIFY通知消息的处理。
( L5 G( l1 G; f2 p* M, j& }5 K8 F3 m5 M8 G0 C# H
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:4 e' n9 k! X# V6 R
+ y$ D: @) t3 F" x0 ?3 o; H* I
ON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)! C; T+ m0 Z. V$ @
- s# r! O6 m. V! d9 C6 c4 U
改为! m0 r. @) V# @- r) L  v. L6 @
: f' e4 i: I/ M* _; j' `
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)6 ~  c: {% z$ B7 b
ON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree)  o* ~5 b( i& G' }3 Y
& d9 q- E; v: J8 e
这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 05:19 , Processed in 0.016375 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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