2011-01-20 15 views
5

मैं वर्तमान में कुछ सी शीर्षलेखों का अनुवाद Delphi में कर रहा हूं। मैं सी से डेल्फी में फ़ंक्शन पॉइंटर को परिवर्तित करने के लिए संदर्भ ढूंढने में असमर्थ हूं।सी फ़ंक्शन पॉइंटर अनुवाद?

typedef _JAlloc JAlloc; 
struct _JAlloc { 
    void *(*alloc) (JAlloc *allocator, size_t size); 
    void (*free) (JAlloc *allocator, void *p); 
    void *(*realloc) (JAlloc *allocator, void *p, size_t size); 
}; 
  1. क्या इस की डेल्फी अनुवाद हो जाएगा?

  2. सी हेडर से डेल्फी के मैन्युअल रूपांतरण के लिए मुझे अच्छे संसाधन कहां मिल सकते हैं (पॉइंटर, प्रीप्रोसेसर निर्देश आदि सहित)?

+0

गलती से एक टिप्पणी के रूप में एक जवाब (मेरा उत्तर के लिए नीचे देखें) में प्रवेश किया। –

उत्तर

8

कोड

type 
    PJAlloc = ^TJAlloc; 
    TJAllocAlloc = function(allocator: PJAlloc; size: integer): pointer; cdecl; 
    TJAllocFree = procedure(allocator: PJAlloc; p: pointer); cdecl; 
    TJAllocRealloc = function(allocator: PJAlloc; p: pointer; size: integer); cdecl; 
    TJAlloc = record 
    alloc: ^TJAllocAlloc; 
    free: ^TJAllocFree; 
    realloc: ^TJAllocRealloc; 
    end; 

और परिवर्तन cdecl इस तरह का प्रयोग करें stdcall के लिए, अपने सी पुस्तकालय की बुला सम्मेलन के आधार पर।

एक वैकल्पिक घोषणा (अधिक 'pascalish' शायद) हो सकता है:

type 
    TJAllocAlloc = function(var allocator: TJAlloc; size: integer): pointer; cdecl; 
    TJAllocFree = procedure(var allocator: TJAlloc; p: pointer); cdecl; 
    TJAllocRealloc = function(var allocator: TJAlloc; p: pointer; size: integer); cdecl; 
    TJAlloc = record 
    alloc: ^TJAllocAlloc; 
    free: ^TJAllocFree; 
    realloc: ^TJAllocRealloc; 
    end; 
+0

+1 बहुत प्रभावशाली उत्तर !! – ComputerSaysNo

+0

धन्यवाद Bouchez। क्या आपको पता है कि इंटरनेट से सी से डेल्फी में अनुवाद करने के बारे में मुझे और जानकारी कहां मिल सकती है? मैं वर्तमान में रूडी ब्लॉग का उपयोग कर रहा हूं। – Ramnish

+1

@ रमनीश मेरे पास कोई संसाधन नहीं है। मैंने इसे प्रयोग के साथ सीखा। लेकिन कुछ सी एपीआई (जैसे ओपनजीएल/जीडीआई +/एसक्यूएलएइट) के कुछ मैन्युअल रूपांतरण पर नज़र डालें और आपको कुछ टिप्स मिलेंगे। डेल्फी के साथ अच्छा क्या है कि आप सी ++ बिल्डर (फ्री कमांड लाइन कंपाइलर सहित) के साथ सी कोड संकलित कर सकते हैं, फिर परिणामी .obj को अपनी डेल्फी इकाई से लिंक कर सकते हैं। मैंने _ftol/_ftoul/_lldiv/_llshr जैसे कुछ निम्न-स्तरीय एएसएम युक्तियों का उपयोग किया है और ऐसे में http://synopse.info/fossil/finfo?name=SQLite3/SQLite3.pas –

1

डॉ बॉब HeadConv उपयोगिता डेल्फी में सी घोषणाओं परिवर्तित करने के लिए उपयोग करने के लिए एक अच्छा एक है, और की तुलना के लिए एक अच्छा शिक्षण उपकरण है समकक्ष पास्कल स्रोत कोड के लिए सी स्रोत कोड।

You can find it here

+2

यह प्राचीन है, और प्रतीत होता है कि कभी काम नहीं किया। एच 2 पी –

+1

पर जाएं यह ओडीबीसी 3.0 एपीआई हेडर के लिए काम करता है, जिसके परिणामस्वरूप कोड में कुछ बदलाव होते हैं। प्राचीन के रूप में - सी पिछले 12-15 वर्षों में बाहरी डीएलएल और पुस्तकालयों को कॉल करने के लिए पास्कल वाक्यविन्यास नहीं बदला है, न ही पास्कल सिंटैक्स है। –

संबंधित मुद्दे