2011-05-30 8 views
5

का उपयोग कर समोच्च रेखाएं बनाना मैं डेल्फी और जीडीएएल 18 का उपयोग कर अलगाव बनाने की कोशिश कर रहा हूं। उसके लिए मैं निम्नलिखित कोड का उपयोग कर रहा:जीडीएएल और डेल्फी

layer:= OGRCreateLayer(ogr_ds, PAnsiChar(WideStringToString('contour')), nil, ogr.wkbLineString, nil); 
err:= GDALContourGenerate(band, 1, 0, 0, aFixedLevel, 0, 0, layer, 0, 1, nil, nil); 

GDALContourGenerate आदेश एक "Unnsupported ज्यामिति प्रकार" रिटर्न - त्रुटि।

function GDALContourGenerate(srcBand: TGDALRasterBandH; contourInterval: double; 
         contourBase: double; fixedLevelCount: longint; fixedLevel: TDoubleArray2; 
         useNoData: longint; noDataValue: double; 
         layer: TOGRLayerH; idField: longint; elevField: longint; 
         pfnProgress: TGDALProgressFunc; pProgressArg : POINTER): TOGRErr; external External_Lib name 'GDALContourGenerate'; 

मैं भी अन्य ज्यामिति प्रकार (उदा wkbLineString25D) की कोशिश की है, लेकिन यह मदद नहीं की:

मैं gdal18.dll निम्नलिखित तरीके से शामिल थे। यदि आपके पास कोई सुझाव है तो मुझे खुशी होगी। Thnaks एक बहुत, मारियो

[संपादित करें] मुझे पता चला है कि एक ही त्रुटि तब होती है जब मैं "शून्य" के साथ "परत" (GDALContourGenerate में) replaye। तो शायद समस्या कहीं और है [/ संपादित करें]

उत्तर

4

आप शायद इस तरह के रूप (नाम डेल्फी में समारोह घोषणा से मेल खाता है, तो यह ध्यान नहीं दिया जा सकता है) बाहरी घोषणाओं के बाद cdecl जोड़ना चाहिए,:।

function GDALContourGenerate(srcBand: TGDALRasterBandH; contourInterval: double; 
         contourBase: double; fixedLevelCount: longint; fixedLevel: TDoubleArray2; 
         useNoData: longint; noDataValue: double; 
         layer: TOGRLayerH; idField: longint; elevField: longint; 
         pfnProgress: TGDALProgressFunc; pProgressArg : POINTER): TOGRErr; 
cdecl; external External_Lib; 

या stdcall शब्द निर्भर करता है कि डीएल कैसे संकलित किया गया था।

और स्ट्रिंग पैरामीटर के लिए, GDAL अपनी सी फ्लैट एपीआई में *char मापदंडों AFAIK का उपयोग करता है के बाद से, आप इस तरह के रूप में सीधे एक PAnsiChar उपयोग कर सकते हैं,:

 layer:= OGRCreateLayer(ogr_ds, 'contour', nil, ogr.wkbLineString, nil); 

डेल्फी 2009 से पहले, आप pointer(aString) इस तरह के मापदंडों के लिए उपयोग कर सकते हैं , और डेल्फी 200 9 के बाद, aString: string मान टाइप करने के लिए केवल pointer(AnsiString(aString))

आपने convert the .h header कैसे किया?

+1

आपको बहुत बहुत धन्यवाद! मैंने समस्या की खोज में काफी समय बिताया लेकिन मैंने नहीं देखा कि मैं "सीडीसीएल" भूल गया था। अब सब कुछ ठीक काम करता है! –

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