Any ideas what fillchar is doing?

2019-09-06 18:42发布

I'm converting from C++ to js-ctypes, and came across this function that is not documented by the guy.

fillchar

It's not on msdn either. Any ideas on what it's doing?

 var aButton:TTBBUTTON;
 //Check if there's another button after this one.
 fillchar(aButton,sizeof(aButton),0);
 rez:=CallWindowProc(OldWndProc,hToolbar,TB_GETBUTTON,ButtonIndex+1,integer(@aButton));
 HaveBehind:=(rez<>0) and (not HasFlag(aButton.fsStyle,BTNS_DROPDOWN));

in js-ctypes aButton is this:

var aButton = new struct_TBButton();
var struct_TBButton;
if (ctypes.voidptr_t.size == 4 /* 32-bit */ ) {
    struct_TBButton = ctypes.StructType('TBButton', [
        {'iBitmap': ctypes.int},
        {'idCommand': ctypes.int},
        {'fbState': ctypes.unsigned_char},
        {'fsStyle': ctypes.unsigned_char},
        {'bReserved': ctypes.unsigned_char},
        {'bReserved2': ctypes.unsigned_char},
        {'dwData': ctypes.uintptr_t},
        {'iString': ctypes.intptr_t}
    ]);
} else { /* 64-bit */
    struct_TBButton = ctypes.StructType('TBButton', [
        {'iBitmap': ctypes.int},
        {'idCommand': ctypes.int},
        {'fbState': ctypes.unsigned_char},
        {'fsStyle': ctypes.unsigned_char},
        {'bReserved': ctypes.unsigned_char},
        {'bReserved2': ctypes.unsigned_char},
        {'bReserved3': ctypes.unsigned_char},
        {'bReserved4': ctypes.unsigned_char},
        {'bReserved5': ctypes.unsigned_char},
        {'bReserved6': ctypes.unsigned_char},
        {'dwData': ctypes.uintptr_t},
        {'iString': ctypes.intptr_t}
    ]);
}

1条回答
我想做一个坏孩纸
2楼-- · 2019-09-06 19:29

Looks like Delphi code. Indeed, Delphi has a FillChar function that matches the signature of your sample and also would make sense from the context. FillChar is just another implementation of C memset.

So, given the docs of FillChar

fillchar(aButton,sizeof(aButton),0);

is equivalent to

memset(aButton, 0, sizeof(aButton));
// Or ZeroMemory(aButton, sizeof(aButton));

meaning it only sets the whole thing to 0 bytes.

As discussed in memset has no DLL so how ctype it, you can skip this for new js-ctypes structure instances, as js-ctypes initializes the memory for you.

查看更多
登录 后发表回答