Haskell (GHC)로 작성된 코드에 콜백 함수를 제공하려고합니다. GCC C 컴파일러와 같은 함수 유형을 사용하여 기능을 내보내고 가져오고 런타임에 코드와 상호 운용합니다.멤버 정적 콜백 함수에 대한 extern "C"
나는 사실 그 방법 클래스에 this
포인터를 받아 바로 전화 콜백 기능을 제공해야합니다 :
struct C
{
int f(int i) { ; }
static int f_callback(void * self, int i)
{
static_cast< C * >(self)->f(i);
}
};
논리적으로 f_callback
클래스 C
의 일부를, 그래서 해당로 배치 네임 스페이스 범위.
하지만 extern "C"
언어 사양을 사용해야합니까 (걱정하지 마세요. 전화 회의는 여기에서 중요하며 이름 변경은 아닙니다)? extern "C"
을 일반 네임 스페이스에서 선언하고 정의 할 수 있지만 extern "C"
함수에 대한 몇 가지 특수 규칙이 다른 네임 스페이스에 같은 이름으로 정의되어 있지만 there is은 클래스 범위의 네임 스페이스와 단순 네임 스페이스 하나 사이에 구분이 없습니다.
static extern "C"
함수를 클래스 범위로 정의 할 수 있습니까?
아니요, IIRC는 불가능합니다. 그러나 C 및 C++에서 다른 ABI 또는 스택 프레이밍을 사용한다고 걱정할 필요는 없습니다. – user0042
@ user0042 '정적 __cdecl'보다 안전한 것이 있습니까? – Orient
이것은 휴대용이 아닌 주석이지만 네가 사용할 수 있습니다. – user0042