|
请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!
您需要 登录 才可以下载或查看,没有账号?注册
x
" ` c* V, @. @
3 ]; @, h+ Q1 ~1 n Y使用内部函数实现枚举类型宽度设置
8 o/ K$ ]5 a( h# Y
4 s! u5 z1 {, c3 X! ?可以自由设置宽度了
0 I$ b0 q1 z1 h: @( T+ d( X2 [' l( @' _. D" a
- void Utilities_InternalFunctionCast::setEnumBlockWidth(tag_t enumTag, int widthValue)
& ?; _5 H0 p) ]) r a# {, ]5 o/ d4 w - {
0 N6 N0 [1 l& w8 J/ ~5 S! J$ v - u( g8 \ R, @5 D# y
- HMODULE uifw = LoadLibrary(INTERNAL_UIFWLIB);3 X0 G E6 v" g) i0 E
- HMODULE syss = LoadLibrary(INTERNAL_SYSSLIB);: p& f, {5 f2 Z/ s* P0 N; f
- typedef void* (*TagToPtr_fp_t)(tag_t);- ]: N0 B5 k) B) o- _5 P& ^% F/ Y
- typedef void(*setWidth_fp_t)(void*, int);3 O! S7 O; m! o* [
, ]; I8 a6 a& ~2 y5 _; ]. j- TagToPtr_fp_t TagToPtr = NULL;
* A" E! l8 W/ C: f. K% F4 ?; E - setWidth_fp_t setWidth = NULL;
9 |0 d$ W- `) _+ a - " R/ o* U/ V. y1 f. d
- char* ptrName = "?TAG_ask_pointer_of_tag@@YAPEAXI@Z";
* n& Y, H% x0 ] - char* widthName = FUNCTIONNAME_SETENUMWIDTH;
! V" e& D) {! [( d - 3 n8 B! C3 G1 |7 e
- TagToPtr = (TagToPtr_fp_t)GetProcAddress(syss, ptrName);
7 ^) h( n! ?& [/ d! r$ r - setWidth = (setWidth_fp_t)GetProcAddress(uifw, widthName);/ v2 h) {( H( k
- \# A; T( K% G. m$ ~2 x9 k- if (TagToPtr != NULL && setWidth != NULL)
0 V( R1 q, w0 ?- }; j - {$ B: L- n' Y5 X2 i" a2 ~' g
- setWidth(TagToPtr(enumTag), widthValue);
) k$ z( m/ o2 M' {$ b h5 X5 C) B - }0 _9 O/ h7 J% l9 a! x& Q
- FreeLibrary(uifw);. a' {4 z) p* D
- FreeLibrary(syss);4 i+ l" F' K& C! E
- , u" l0 K7 S) g5 Q6 T6 I
- 2 ~! ~; L$ T4 f4 F- s( \/ P( p& Y( X
- }
复制代码 7 p4 r, @8 E" }' K9 ^
$ j4 r# z, j( @; e/ f |
|