Selamün Aleyküm;
Altta bağlantısını vermiş olduğum siteden yararlanarak Object Pascal'dan C++ kodu çağırmaya çalışıyorum. Lakin burada da görüldüğü üzere şu sualler aklıma takıldı:
Bağlantı Adresi: http://rvelthuis.de/articles/articles-cppobjs.html
'1-)' İlk örnekte görüldüğü gibi bir C++ sınıfı yazılmış (Console sınıfı) ve alt tarafta da bu sınıf özelliğini kaybederek 'extern "C"' ile saf fonksiyonlar yazılmış. Acaba bu şekilde değil de C++ sınıfını yazıp başka bir dilde 'extern "C"' kullanmadan direk bu sınıftan nesne üretip kullanabilir miyiz? Misal olarak:
/* Bu sınıf için extern "C" kullanmadan başka dilde bu sınıfı kullanabilir miyiz? */
class Console
{
public:
int get_int(int n) { return n; }
std::string get_str(const std::string& str) { return str; }
static void write(const std::string& str) { std::cout << str << '\n'; }
};
/* --- Misal Delphi'de şu şekilde direk kullanabilir miyiz? : --- */
var
cons : Console;
i : Integer;
s : String;
begin
i := cons.get_int(777);
s := cons.get_str('Hello World!');
Console.write('--- String ---');
end;
'2-)' "Using COM-style interfaces" başlığı altında:
struct __declspec(uuid("{9BBDA1A4-21E7-4D11-8F1C-E2AD13D2779C}"))
IConsole : public System::IInterface
Bu satırda uuid ile benzersiz bir id oluşturulmuş. Peki bu id'yi neye göre yazmışlar? Mesela ben 32 karakter sayısını bozmadan misal şöyle kafadan bir id oraya yazsam olur mu? : '"{7V9NCC32-4629-GOO1-P2P1-B036LGA299ZX}"'. Eğer kafadan yazamıyorsak nasıl böyle bir değer elde edebiliriz?
'3-)' Yine 2. sualimle ilgili olarak bu id değeri tam olarak kod içinde ne işe yarıyor? Ayrıca bu kod nasıl çalışıyor?
'4-)' __cdecl, __stdcall ve __fastcall tam olarak ne oluyor? Bunları biraz araştırdım lakin neden bu şekilde ayrı ayrı anahtar sözcükler oluşturmuşlar ve niçin bunları kullanmamız gerekiyor, bunların yanıtını tam olarak bulamadım.
Teşekkürler!
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
Permalink
Reply