namespace проблем

4 отговора 288 прегледа
#1

namespace проблем

namespace NTEST{
int __stdcall FTEST(int a,int b);
}
__declspec(naked) int __stdcall NTEST::FTEST(int a,int b)
{
__asm push ebp
__asm mov ebp,esp
__asm pop ebx
__asm ret 08h
}
int main()
{
return NTEST::FTEST(1,2);
}
Макар,че фуккцията е гола компилатора добавя код за пролог и епилог.
Но ако не се използва именно пространство всичко е както се очаква.Къде греша?

Отговор
в отговор на Alex #2

Re: namespace проблем

Alex, imash ambiguity v coda - zatova kompilatora se shashka i go dava restriktivno :-))
Namespace-a ne e klas definicija. VC-to ne razbira, che ti pishesh implementacijata na simvola FTEST@8 - tova e ambiguity-to. Makar che po princip bi trjabvalo da go razbira :-)))))


Napishi go taka i shte stane:

namespace NTEST
{
int __stdcall FTEST(int a,int b);
}

namespace NTEST
{
__declspec(naked) int __stdcall FTEST(int a,int b)
{
__asm push ebp
__asm mov ebp,esp
__asm pop ebx
__asm ret 08h
}
}

int main()
{
_asm int 3
return NTEST::FTEST(1,2);
}

Syshto taka bih ti preporychal da polzvash ne _stdcall, a _fastcall v tozi sluchai.

Po-zdravi !

Отговор
в отговор на manski #3

Re: namespace проблем

Защо в кода си написал __asm int 03h?.

Отговор
в отговор на Alex #4

Re: namespace проблем

breakpoint.

Отговор
в отговор на Alex #5

Re: namespace проблем

Da, po princip po-kulturno e da se napishe ne "_asm int 3", a "DebugBreak()"

Dori samo zaradi fakta, che na ne-x86 platforma "_asm int 3" njama da se kompilira :-)))))

Za x86 DebugBreak() na praktika vika int 3.
Za IA64 DebugBreak() njakoi ot razlichnite "break *, 0"

Отговор