namespace проблем
4 отговора
288 прегледа
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);
}
Макар,че фуккцията е гола компилатора добавя код за пролог и епилог.
Но ако не се използва именно пространство всичко е както се очаква.Къде греша?
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);
}
Макар,че фуккцията е гола компилатора добавя код за пролог и епилог.
Но ако не се използва именно пространство всичко е както се очаква.Къде греша?
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 !
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 !
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"
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"