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

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

[复制链接]
发表于 2005-4-1 18:20:01 | 显示全部楼层 |阅读模式
  编写WIN98系统下使用的UNICODE程序,可以使用MSLU。5 h0 l. @6 x" ^' i: I' T0 [$ ~
0 o$ [9 m% A, y8 _/ B  o
一、使用MSLU的选项8 j6 g% D# Y0 P

4 d% @4 V# k$ F& w, y' Q- Q+ n6 q% t- I二、调用unicows.dll失败的处理, Y. g* w" r9 {$ i" Y, d
9 X3 Y, b* e0 b+ p1 @
三、无法在MSLU上正常工作的函数处理: ?6 u3 k0 N, d/ E2 x5 d8 ?
$ n& @$ i; @& W+ h2 r6 C. j
四、对于ON_NOTIFY通知消息的处理。
7 e6 Y/ G1 Y0 j/ G5 D. z% f& m4 J$ p3 _8 O3 e+ w/ X! v0 n  P
; C. |; i+ r6 s( z# B
$ g; m. w8 e8 O* O( |4 z
一、使用MSLU的选项
! h) K9 R, [4 ^7 R0 i9 N# X
$ d5 G) E2 l8 \& LMFC的静态链接Release版本. K1 p8 T! N$ l) }$ L. ~

( \& O( t$ s) D% X% zC/C++选项:
0 z: ]. i- Q: o# x, H8 g1 K$ ^2 _% \: V$ c3 j0 W
去掉_MBCS添加_UNICODE,UNICODE
) A, u  {. H, k5 Z& ?! j- M& {* i/ M( E6 {3 r
Link选项:: i( m" w" e) Q  p

& s& A+ l3 l) k" \: YOutput->Entry Point Symbol:
; p6 |' j! e. P% D! e+ e& W( i
. F& R1 N9 k" Y+ D- B. \wWinMainCRTStartup
* O% ~9 v: t! @) f9 w
: C9 C7 o$ {* yObject/Library modules:
: z. v; J1 Y6 ]& e! G4 X
5 j/ `6 p8 l' c* P+ x6 h% }" _! aunicows.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
. ^- ?4 ?. w5 n/ G. h) |+ M
  R( N4 M) y: q  [2 \7 NMFC的静态链接调试版本:& L9 E* m4 g& D9 F* i: E- A& h4 y
* k& R1 h( y( v. J  w0 _8 V
unicows.lib version.lib mpr.lib rasapi32.lib winmm.lib vfw32.lib oleacc.lib oledlg.lib uafxcwd.lib libcmtd.lib
. d; ^' Q8 b7 a6 F' V: y9 x
1 z) q$ {8 |* u: L2 H- H* N7 l二、调用unicows.dll失败的处理
# L  @: f9 b+ f" ^  p% X4 c- Y; _" p
- U: O$ ?$ \$ y. `. M) {当WIN98下无法加载unicows.dll时注册以下函数进行通知。, W0 Y$ o2 e: n: g3 E
# D: L( m: b( `/ A
HMODULE LoadUnicowsProc(void)
5 \" R  o2 O- t. H5 ]% _6 U) J{7 n. G3 M% k0 g7 I8 Y) N! W
HMODULE hMod = LoadLibraryA("Unicows.dll");4 y: a8 R% L+ M7 E+ d# U: R& Q( b
if (hMod == 0)
/ O  y% S; p: t7 X) p{
4 H: v/ ~7 A# |3 j  MessageBoxA(0,"Unicows.dll Unicode wrapper not found !",
4 q& I/ R0 G0 ~" B/ r   "MWP",MB_ICONSTOP|MB_OK);1 ]; ^5 A2 h8 U# U
  _exit(-1);8 J" N" d9 {. ?9 ^/ {
}& D& F! L. A9 R5 L
return (hMod);* K9 N: s% u! R+ n9 m! m4 W' ^
}
9 h, K! L6 c' U& S6 U. lextern "C" FARPROC _PfnLoadUnicows = (FARPROC)&LoadUnicowsProc;
0 f) d6 T3 I# O- o% }9 i$ |8 J7 J$ r" W& Y
三、无法在MSLU上正常工作的函数处理
5 B" `5 }7 S# p
: p* x# s0 H$ B有些函数无法在MSLU环境下使用,对于这种情况需要自己进行转换。$ i# @5 ?8 m. @' |" k, ?# i

0 {0 T# N: i5 T) H. }, k0 p例如mmioOpen
( q* X6 p; ^9 B+ Y0 }$ O! s' Z5 y: T# J- `* ?" Q
#ifdef _UNICODE* |! f/ H) t) X
if (IsWin98()), I% e* @( w3 K! l! v8 F8 F1 n
{
2 e0 t5 U( c4 E/ [  USES_CONVERSION;
, y2 i' B0 F# h- S' K( [  if (!(m_hmmio = ::mmioOpenA(W2A(lpszFileName), NULL, MMIO_READ|MMIO_ALLOCBUF)))
9 a' |  b' r" w3 Y5 v; T5 ?& P, f% w  {- G/ D7 c2 z9 N, b: v0 T3 Z" f. z
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);! a6 C0 ?; p! D6 g) D$ B$ W8 U
  return FALSE;
" P  F( o( z- \2 W4 f. X! x& V  }
0 O4 X* `* G, o3 q) T% v}2 c' h0 a! l, d; ]' j) f
else
# ]! s: y+ I8 c/ N% R{* v6 F' ~+ k2 m6 B9 R
  if (!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))  ~9 ?- D4 }! A" {0 u
  {
, M8 r( @! X& f4 o   AfxMessageBox(IDS_ERR_OPENWAVEFILE);
1 Q7 U' `; v, r. x* z+ ?   return FALSE;* {& [- F0 R  I- {. V
  }- ^# ?% ~5 P6 `5 {# G% }; S
}
7 I4 z1 J  }1 x#else
' i0 ^% F4 [+ M0 V* hif(!(m_hmmio = mmioOpen((LPTSTR)lpszFileName, NULL, MMIO_READ|MMIO_ALLOCBUF)))" @3 p, g1 a. ^8 E7 Q! c3 g+ _
{: c; m' [5 K5 ~! [
  AfxMessageBox(IDS_ERR_OPENWAVEFILE);
& ~3 {7 v* G9 r  [, ~  o  return FALSE;" r) B9 X8 I$ \( U) x6 e
}
' z" t; ], Q$ `#endif
& e9 U# n" b1 K3 P* g8 S
# Z2 n$ O' I/ h四、对于ON_NOTIFY通知消息的处理。
, i/ A0 H1 G! A/ K5 e% r  n! U; ~* _6 t, d$ _* _4 ~" f% m
对于ON_NOTITY的通知,因为有区分UNICODE非UNICODE版本,需要注意,如:9 @) |, A& w! N% Z3 ^% o9 x2 W1 m

) I+ S' Q$ t% u1 C0 U8 [7 rON_NOTIFY(TVN_ITEMEXPANDING, IDC_PATH_TREE, OnItemexpandingPathTree)/ f4 t  B+ N: P2 i  ^6 U7 z
' Q: ?( f; v& I9 P: ]
改为2 D6 X, F6 `4 z4 i: R# X
: r( H1 x8 u4 p: g% b8 m
ON_NOTIFY(TVN_ITEMEXPANDINGA, IDC_PATH_TREE, OnItemexpandingPathTree)
' @2 b" b: S7 G. t( a# j$ oON_NOTIFY(TVN_ITEMEXPANDINGW, IDC_PATH_TREE, OnItemexpandingPathTree): `3 u7 P4 _6 Q2 z+ c3 `; |/ f2 C
. W& {6 b0 O) [+ z, d
这样可以在WIN98/2K下正常工作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 08:52 , Processed in 0.018551 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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