2011-08-03 15 views
5

में सी # से गुजरने से डेल्फी डीएल फ़ंक्शन कॉल करें। मुझे डेल्फी फ़ंक्शन को .net से बाइट सरणी पर संचालित करने का सबसे अच्छा तरीका पता लगाने में समस्या हो रही है।एक बाइट सरणी

डेल्फी हस्ताक्षर इस तरह दिखता है:

procedure Encrypt(
    var Bytes: array of byte; 
    const BytesLength: Integer; 
    const Password: PAnsiChar); stdcall; export; 

सी # कोड इस तरह दिखता है:

[DllImport("Encrypt.dll", 
    CallingConvention = CallingConvention.StdCall, 
    CharSet = CharSet.Ansi)] 
public static extern void Encrypt(
    ref byte[] bytes, 
    int bytesLength, 
    string password); 

बाइट सरणी घोषणा से पहले var और ref छोड़ना विफल लग रहा था, लेकिन यह आवश्यक है के बाद से मैं केवल सरणी की सामग्री बदल रहा हूं, सरणी ही नहीं?

इसके अलावा, किसी कारण के लिए मैं,, डेल्फी में सरणी की लंबाई प्राप्त करने के लिए अगर मैं Length(Bytes) से BytesLength पैरामीटर को निकालने के काम नहीं करेगा अगर मैं BytesLength पैरामीटर, Length(Bytes) शुरू होता है जोड़ने के काम करने के लिए, लेकिन BytesLength है नहीं कर पा रहे एक गलत मूल्य

उत्तर

2

डेल्फी Encrypt का पहला पैरामीटर Bytes: PByte बनें और आपको जाने के लिए अच्छा होना चाहिए।

एक खुली सरणी, जैसा कि आपके पास है, उम्मीद है कि पॉइंटर को पहले तत्व में पारित किया जाएगा और लंबाई जो आपके प्रश्न में वर्णित है, बताती है।