2014-09-17 3 views
1

Windows에서 Linux로 응용 프로그램을 이식하고 있습니다. Windows 버전에서는 그러한 콜백 typedef void (__stdcall * OrdersCallback)(orders*);을 정의했습니다. 그렇다면 다음과 같이 구현합니다.windown : __stdcall을 대체하는 방법?

void __stdcall OrdersHandler(orders* param) { 
    Processor::Instance().EnqueueFutOrderbook(param); 
}; 

그리고이 응용 프로그램의 포인터를 정적으로 링크 된 라이브러리에 전달하여 라이브러리가 데이터를 다시 전달할 수 있도록합니다.

그러나 리눅스에서는이 줄이 컴파일되지 않습니다 : typedef void (__stdcall * OrdersCallback)(orders*);. 어떻게 콜백 선언과 구현을 업데이트하여 리눅스에서 컴파일해야합니까?

답변

1

콜백이 구현되어 프로그램/lib 에서만 사용되는 경우 (즉 외부 라이브러리가 호출하지 않는 경우) 호출 규칙은 중요하지 않습니다.
모든 곳에서 __stdcall을 제거하십시오.

+1

'#define __stdcall' (즉 비어 있음)이있는 Linux 개발 환경을 기대합니다. 그리고 그렇지 않다면 컴파일 스위치를 사용하여 사실이되게합니다. 대량 검색 및 교체가 필요하지 않습니다. –

+0

@AndrewLazarus 좀 더 적절한 대답이지만, 리눅스에서 호출 규칙을 강제하는 방법을 알고 있다고 생각하지 않습니까? 그게 내가 현재 붙어있어 실제로 현실에서 OP에 대한 "정확한"답변입니다 ... – XtrmJosh

관련 문제