xxx-men 18:17 02.10.2009
Код:
extern void f(int x, ...);
void main()
{
char a = 1;
char b = 2;
int c = 3
f(0,a,b,c);
};
если это скомпилировать переменные запихиваются в стек как DWORD,
мне необходимо первые 2 засунуть как BYTE.
как сделать это средствами с++?
зы: естественно через _asm вставки все нормально.
[Ответ]
Part!zan 18:51 02.10.2009
xxx-men, я че-то не понял твоей проблемы... Тебе кто-то мешает поместить в первый дворд твои байты?
[Ответ]
A-Maverick 19:42 02.10.2009
мб так?
f(0,(byte)a, (byte)b,c);
Тоже не очень понял сути вопроса.
[Ответ]
xxx-men 20:17 02.10.2009
Сообщение от Part!zan:
xxx-men, я че-то не понял твоей проблемы... Тебе кто-то мешает поместить в первый дворд твои байты?
первый дворд нужен совсем под другие цели.
эту функцию писал не я, но я хочу ее использовать.
Сообщение от A-Maverick:
мб так?
f(0,(byte)a, (byte)b,c);
(byte)a копилятор переводит в int, и кладет в стек 4 байта.
----------------------------------------------------------------------------
а вот еще такой вопрос: х86 процесор умеет делать push по одному байту? или только по 4?
[Ответ]
A-Maverick 09:54 03.10.2009
Сообщение от xxx-men:
(byte)a копилятор переводит в int, и кладет в стек 4 байта.
Ну тогда я совсем не понимаю, с какого перепугу ваш компилятор переводит char в int.
[Ответ]
Part!zan 12:34 03.10.2009
Сообщение от xxx-men:
первый дворд нужен совсем под другие цели.
Да какая разница, какой это по счету дворд? Пихай байты во второй дворд. Короче, туда, где они должны по твоему мнению, быть.
[Ответ]
xxx-men 14:37 03.10.2009
типа вот так: f(0, ( a *256 + b) * 256 + LOWORD(c) , HIWORD(c) ); ?
[Ответ]
Part!zan 17:33 03.10.2009
xxx-men, да хотя бы так. только я предпочел бы сдвиг вместо умножения.
[Ответ]