2011-02-24 13 views
7

के रूप में var सरणी मुझे अपने सी # कोड में डेल्फी डीएलएल का उपयोग करने की आवश्यकता है।सी # में डेल्फी डीएलएल - पैरामीटर

सामान्य पैरामीटर के साथ अन्य विधियों का उपयोग करते समय मुझे कुछ सफलता मिली है, लेकिन इस मामले में समाधान अभी भी छिपा हुआ है।

Function Get_Matrix (var Matrix : array [ 1..200 ] of char) : boolean ; stdcall; 

मैं का उपयोग करने की कोशिश की:

[DllImport("DLL.dll")] 
public static extern bool Get_Matrix(ref char[] Matrix); 

सफल नहीं

DLL प्रलेखन इस घोषणा प्रस्तुत करता है। कुछ मदद?

उत्तर

8

पहली बात करने की ज़रूरत सी # तरफ stdcall उपयोग करने के लिए है:

[DllImport("DLL.dll", CallingConvention=CallingConvention.StdCall, 
    CharSet=CharSet.Auto)] 

मैं यह भी सुनिश्चित करें कि डेल्फी पक्ष पद डेल्फी 2009 है और इतने विस्तृत वर्णों का उपयोग करता रहना चाहता हूँ चाहते हैं। यदि ऐसा है, तो वहां कोई समस्या नहीं है। यदि आप गैर-यूनिकोड डेल्फी का उपयोग कर रहे हैं तो आपको CharSet.Ansi की आवश्यकता होगी।

मैं शायद यह भी डेल्फी तरफ एक LongBool लौट सकते हैं और

[return: MarshalAs(UnmanagedType.Bool)] 

नेट तरफ पीठ के साथ यह मार्शल चाहते हैं।

अंत में, निश्चित लंबाई सरणी को अलग-अलग marshalled की जरूरत है। निश्चित लंबाई वर्ण सरणी के लिए मानक दृष्टिकोण .NET पक्ष पर StringBuilder का उपयोग करना है जो आपकी इच्छानुसार मार्शल किया गया है।

इसे पूरी तरह लाना है, और अपने डेल्फी वाक्य रचना फिक्सिंग, देता है:

डेल्फी

type 
    TFixedLengthArray = array [1..200] of char; 

function Get_Matrix(var Matrix: TFixedLengthArray): LongBool; stdcall; 

सी #

[DllImport("DLL.dll", CallingConvention=CallingConvention.StdCall, 
    CharSet=CharSet.Auto)] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool Get_Matrix(StringBuilder Matrix); 

static void Main(string[] args) 
{ 
    StringBuilder Matrix = new StringBuilder(200); 
    Get_Matrix(Matrix); 
} 

अंत में, सुनिश्चित करें कि आप अशक्त-समाप्त कर अपने स्ट्रिंग जब आप इसे अपने डीएलएल से वापस करते हैं!

+0

हाय, समस्या अभी भी है। यह "चार सरणी" के सापेक्ष प्रतीत होता है, जब मैं आयात को बिना पैरामीटर प्रोग्राम के चलते घोषित करता हूं, लेकिन जब मैं चार पैरामीटर घोषित करता हूं –

+0

डेल्फी का कौन सा संस्करण? –

+0

हाय, मैं सीधे पहले नहीं सोच रहा था। मैं सरणी marshalling के बारे में भूल गया था। मेरा मानना ​​है कि अद्यतन उत्तर आपके लिए नौकरी करेगा। –

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