|
|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
( p7 k# O1 b5 I: V7 p+ E
' N! z2 g) R* Y$ X- l使用内部函数实现枚举类型宽度设置
0 w9 K n/ q6 r2 I3 U- T4 M) Y8 p* s+ K! f! T7 O
可以自由设置宽度了 - X) j& Z' s1 o* l& ]/ ?1 K1 n
. }/ K% ~; j4 D! g, z2 Q" v
- void Utilities_InternalFunctionCast::setEnumBlockWidth(tag_t enumTag, int widthValue)
. p( D9 k8 R5 n6 d) ~$ I# |, G' { - {9 J& c. o9 d7 a6 a
- 7 m N5 ^4 `7 h" Y) s7 a3 ?
- HMODULE uifw = LoadLibrary(INTERNAL_UIFWLIB);
7 z- P, F( k+ k8 r5 v - HMODULE syss = LoadLibrary(INTERNAL_SYSSLIB);, N* B3 j) o, `9 T
- typedef void* (*TagToPtr_fp_t)(tag_t);
1 s- m: M. n6 |; v& E - typedef void(*setWidth_fp_t)(void*, int);4 h3 b& ?8 B) r
+ h3 Y: J. J' h& z; @- TagToPtr_fp_t TagToPtr = NULL;0 T/ T2 y9 s% s2 `, h+ k
- setWidth_fp_t setWidth = NULL;
8 f: q$ I2 ?; R) M
7 T0 g# c; H& b) Q- char* ptrName = "?TAG_ask_pointer_of_tag@@YAPEAXI@Z";5 H( u" E/ y, f8 v8 g
- char* widthName = FUNCTIONNAME_SETENUMWIDTH;0 v% G. @ `+ y
- % Q: q( _# d$ k1 }9 i. T% C9 B2 i
- TagToPtr = (TagToPtr_fp_t)GetProcAddress(syss, ptrName); P8 t+ P3 m. c4 Y7 M5 r% c
- setWidth = (setWidth_fp_t)GetProcAddress(uifw, widthName);+ ?4 u1 f9 n# o2 P/ K
- 8 ]. e( u, i8 F9 N
- if (TagToPtr != NULL && setWidth != NULL)
$ `8 c# `" C b+ O2 h8 s% L) P4 n - {
4 v4 \6 m+ |1 T: a S) ]3 S. { - setWidth(TagToPtr(enumTag), widthValue);
& @6 _: S' Z8 k9 u$ Z - } R5 W7 `/ C, V
- FreeLibrary(uifw);$ p/ f( W2 A: ^7 U$ R
- FreeLibrary(syss);
8 s( T; b# n" Q8 z8 B - + p( I3 B' n7 A3 i0 F
& Q, q, F Q0 v$ Q5 O9 N1 I& Z- }
复制代码
; r- ?1 C$ G3 @. W L; R8 W9 y
9 i4 y6 \+ ^+ {- U. R |
|