Objective-C bilmiyorum ve eğer mümkün olursa bilmek te istemiyorum :) Fakat yolum cocoa'ya düştü sandım ve bu konuyu araştırdım. Daha sonra Carbon kullandım.
Cplusplus içinde Objectıve-C fonksıyonu çağırmak çok basit. Öncelikle şunu belirteyim, Objective-C içinde C++ kullanabiliyorsunuz. Hemen konuya geçelim. Xcode4 kullanıyorum ve her dosyayı C++ source veya Objective-C source olarak seçebiliyorsunuz. Gerçi kendisi dosya uzantısına göre yaratılırken belirliyor ama isterseniz değiştirebilirsiniz. Bir consol tabanlı C++ projemiz olsun. Bu projenin içine ilk olarak a.m diye bir dosya ekleyelim. Sonra içine şu satırları yazalım:
// a.m
#import ‹Foundation/Foundation.h›
void a_func()
{
NSString *str = @"Test";
NSLog(str);
}
Burada gördüğünüz gibi fonksiyon tanımlamasını C/C++ syntax'ında yaptık. Fakat fonksiyonun içeriği Objective-C formatında. İsterseniz başka bir Objective-C class'ı yazıp buradan o class'ı çağırabilirsiniz.
Şimdi gelelim C++ dosyamıza. b.cpp isminde bir dosya yaratıp projeye ekleyelim. Sonra içine şu satırları yazalım:
// b.cpp
#include ‹iostream›
extern "C" {
void a_func();
}
int main (int argc, const char * argv[])
{
a_func();
return 0;
}
Burada dikkat edilmesi gereken durum extern "C" ifadesidir. Bilindiği gibi bu ifadeyi C++ içinden çağırılacak bir C fonksiyonumuz varsa kullanıyoruz. C ile C++ fonksiyonları farklı şekilde derlerler. Eğer bu belirtilmezse bağlama zamanında linker fonksiyonu bulamaz ve linker error alırsınız.
İşte burada da aynı durum soz konusu. Objective-C içine yazdığınız bir fonksiyon C isimlendirme kurallarına göre hazırlanır.
Artık projeyi derleyip çalıştırabilirsiniz.
Volkan Özyılmaz
Cplusplus içinde Objectıve-C fonksıyonu çağırmak çok basit. Öncelikle şunu belirteyim, Objective-C içinde C++ kullanabiliyorsunuz. Hemen konuya geçelim. Xcode4 kullanıyorum ve her dosyayı C++ source veya Objective-C source olarak seçebiliyorsunuz. Gerçi kendisi dosya uzantısına göre yaratılırken belirliyor ama isterseniz değiştirebilirsiniz. Bir consol tabanlı C++ projemiz olsun. Bu projenin içine ilk olarak a.m diye bir dosya ekleyelim. Sonra içine şu satırları yazalım:
// a.m
#import ‹Foundation/Foundation.h›
void a_func()
{
NSString *str = @"Test";
NSLog(str);
}
Burada gördüğünüz gibi fonksiyon tanımlamasını C/C++ syntax'ında yaptık. Fakat fonksiyonun içeriği Objective-C formatında. İsterseniz başka bir Objective-C class'ı yazıp buradan o class'ı çağırabilirsiniz.
Şimdi gelelim C++ dosyamıza. b.cpp isminde bir dosya yaratıp projeye ekleyelim. Sonra içine şu satırları yazalım:
// b.cpp
#include ‹iostream›
extern "C" {
void a_func();
}
int main (int argc, const char * argv[])
{
a_func();
return 0;
}
Burada dikkat edilmesi gereken durum extern "C" ifadesidir. Bilindiği gibi bu ifadeyi C++ içinden çağırılacak bir C fonksiyonumuz varsa kullanıyoruz. C ile C++ fonksiyonları farklı şekilde derlerler. Eğer bu belirtilmezse bağlama zamanında linker fonksiyonu bulamaz ve linker error alırsınız.
İşte burada da aynı durum soz konusu. Objective-C içine yazdığınız bir fonksiyon C isimlendirme kurallarına göre hazırlanır.
Artık projeyi derleyip çalıştırabilirsiniz.
Volkan Özyılmaz
Yorumlar