함수 호출형식이 다르면 당연히 안되죠
함수 호출형식에 따라 파라메타 전달 방식과 스택정리방식이 다르므로 주의해야 합니다.
특히 DLL을 만들때 호출규약은 매우 중요하죠
아래 를 참조하세요
호출규약 인수전달 스택정리 이름규칙
======================================================================================
__cdecl 오른쪽 먼저 호출원 _함수명
-------------------------------------------------------------------------------------
__stdcall 오른쪽 먼저 함수 _함수명@인수크기
-------------------------------------------------------------------------------------
__fastcall ECX, EDX에 우선 전달. 나머지는 오른쪽 먼저 함수 @함수명@인수크기
-------------------------------------------------------------------------------------
thiscall 오른쪽 먼저, this 포인터는 ecx 레지스터로 전달된다. 함수 C++ 이름 규칙을 따름.
-------------------------------------------------------------------------------------
naked 오른쪽 먼저 함수 없음
-------------------------------------------------------------------------------------
그럼..'
조세현 님이 쓰신 글 :
: bsearch 함수의 마지막 파라미터가
:
: int ( * comparator ) ( const void *, const void * )
:
: 입니다.
:
: 멤버함수로 int __fastcall aaa( const void *, const void * ) 를 만들어서
:
: bsearch(...,aaa);
:
: 로 실행하니까 에러나는데 왜 그럴까요...
:
: 멤버에서 빼서 __fastcall을 지우고 함수 선언하니까 컴파일 되긴한는데...
:
: 답변 부탁합니다.~
|