मैं तो हमारे अन्य एप्लिकेशन डेवलपर उस तक पहुँच सकते सी # करने के लिए बंदरगाह के लिए काम दिया गया है कुछ पुस्तकालय दिनचर्या के साथ करने के लिए है, लेकिन मैं चर घोषित करने के लिए कैसे तो वे दिनचर्या में आ पता नहीं है सही ढंग से। DLL आयातDll आयात सी ++ सी # सरणी
[DllImport(MODELAPP, EntryPoint = "SteadyFor", ExactSpelling = false)]
public static extern int SteadyFor(
ref double[] par, ref double[] inlet, ref double[] outlet,
[MarshalAs(UnmanagedType.LPStr)] string input,
[MarshalAs(UnmanagedType.LPStr)] string output);
double[] Par = { 8, 16, 8, 0.61, 0.00635, ... }; // 29 variables
double[] Inlet = { 22.18, 43.31, 1.13, 2.81, 0.43 }; // 5 variables
double[] Outlet = { 0, 0, 0, 0, 0, 0 }; // placeholder for 6 variables
SteadyFor(ref Par, ref Inlet, ref Outlet, FileIn, FileOut);
:
समस्या यह है, जब मैं सी ++ कोड के साथ में इनपुट पढ़ने के माध्यम से कदम, मैं सभी विषम मूल्यों को प्राप्त का उपयोग करने के
प्रयास
सी ++ फ़ाइल:
extern "C" int SteadyFor(double Par[], double Inlet[], double Outlet[], char* FileIn, char* FileOut)
{
int n = (int)Par[0]; // Actual Reading: [0]
int nt = (int)Par[1]; // Actual Reading: [0]
int pass = (int)Par[2]; // Actual Reading: [0]
double l = Par[3]; // Actual Reading: [2.9581223236733198e+174]
double rTube = Par[4]; // Actual Reading: [2.121995790965e-314#DEN]
double tTube = Par[5]; // Actual Reading: [5.432309224896e-312#DEN]
double pl = Par[6]; // Actual Reading: [1.0253217546256438e-267]
double pt = Par[7]; // Actual Reading: [4.60629e-308]
// ...
}
जाहिर है, मानों मैं हो रही है सब गलत कर रहे हैं - लगभग जैसी गैर-प्रारंभ स्मृति।
कोई मुझे बता सकते हैं मैं गलत क्या कर रही हूं और इसे ठीक करने के लिए?
सादर,
~ जो
वह काम करता है, हंस। अब क्यों? सी ++ पॉइंटर्स में ला रहा है, और सी # गुजर रहा है ... क्या? संकेत दिए गए? – jp2code
एक सरणी के लिए डिफ़ॉल्ट मार्शलिंग अपने पहले तत्व को पॉइंटर पास कर रहा है। बस सी ++ करता है। Arrays कभी मूल्य से पारित नहीं होते हैं, यह बहुत महंगा होगा और बड़े सरणी पर असफल होने के लिए बर्बाद हो जाएगा। जब आप "रेफरी" का उपयोग करते हैं तो यह उस पॉइंटर को पॉइंटर पास करता है। –