문제

프론트 엔드에는 Objective-C를 사용하여 그래픽 응용 프로그램을 작성하고 그래픽 처리 및 네트워크 통신에는 C ++를 작성합니다. 나는 애플의 사이트에서 .dylib 또는 .그래서 C ++ 코드가 Xcode 프로젝트에 포함되어 있지만 아무것도 작동하지 않는 것 같습니다. 나는 프로젝트를 참조하고 그것에 대해 연결하기 위해 프로젝트를 얻을 수 있었지만, 그 .dylib에서 기능을 호출하려고 할 때, 그것이 내가 무엇을하려고했는지 알지 못한다고 말하는 것이 었습니다. 여기서 무슨 일이 일어나고 있는지 아는 사람이 있습니까?

Objective-C에는 그래픽과 네트워킹을 수행하는 데 필요한 모든 라이브러리가 있다는 것을 알고 있습니다. 나는 한동안 C ++를 많이하지 않았고 더 많은 목표 C를 배우고 싶습니다. 그래서 함께 사용하는 것보다 더 좋은 방법은 무엇입니까?

고마워요, 로비

도움이 되었습니까?

해결책

당신은 "이름 망글 링 (Mangling)"이라는 형태로 한 장애물을 낼 것입니다. C ++는 OBJ-C와 호환되지 않는 방식으로 기능 이름을 저장합니다.

Objective-C는 C ++와 같은 방식으로 클래스를 구현하지 않으므로 좋아하지 않을 것입니다.

이 주위의 한 가지 방법은 C ++ 기능을 호출하는 간단한 C 함수 세트를 구현하는 것입니다. C 함수의 수를 가능한 한 낮게 유지하는 것은 좋은 도전입니다! 당신은 좋은 소형 인터페이스로 끝날 것입니다! :)

이러한 기능을 C ++ 파일로 선언하려면 C로 표시해야합니다.

extern "C" int function_name(char *blob,int number, double foo) {...}

이것은 표준 이름 씨글 링을 비활성화합니다.

목표 C 코드와 공유 할 수있는 모든 기능에 대한 프로토 타입으로 헤더 파일을 구축하십시오.

당신은 같은 방식으로 클래스를 전달할 수는 없지만 (OBJC 코드는 사용할 수 없기 때문에) 포인터를 전달할 수 있습니다 (유형에 대해 약간 거짓말을해야 할 수도 있지만).

다른 팁

내가 일하는 대부분의 프로젝트에는 OBJC 프론트 엔드와 C ++ 백엔드가 있습니다. 기능 만 다루는 경우 Dave Gamble의 이름 Mangle Fix가 정확하지만 OBJC 및 C ++ 객체를 모두 처리 해야하는 더 복잡한 상황을 다루는 경우 C ++ 객체를 포장하는 것이 가장 좋습니다. OBJC 객체에서. 불투명 참조 사용 (매우 멋진 말하는 방법입니다. void*), 당신은 실제로 OBJC의 C ++ 객체를 주변으로 나눠 줄 수 있으며 그 반대도 마찬가지입니다. 나는 약간있다 샘플 코드 도움이 될 수 있습니다.

즉, 그래픽의 경우 핵심 이미지와 관련 프레임 워크를 사용하지 않고 사용자 정의 C ++를 수행하는 심각한 성능을 얻을 수 있습니다. 핵심 이미지와 다른 그래픽 프레임 워크는 MAC에 대해 최적화되어 있으며, 손으로 달린 C ++ (또는 MAC에 특별히 잘 쓰여진 C ++)를 사용하면 더 잘 수행 할 가능성이 거의 없습니다. 10.6 및 Grand Central Dispatch로 이동하면 성능 차이가 더욱 주목할 것입니다. 그렇지 않으면 무료로 얻을 수있는 모든 병렬화 발전을 잃을 수 있기 때문입니다. 이것은 OBJC와 관련이 없습니다. 핵심 이미지는 C입니다. C ++에서 호출 할 수 있습니다. 휴대 성이 필요하지 않거나 핵심 이미지를이기는 데 필요한 전문 지식이없는 한 모든 언어로 Mac의 사용자 정의 그래픽 처리를 권장합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top