2010-04-24 6 views
5

नमस्कार,PInvoke ढेर

मैं एक dll कि है कि नेटवर्क के बारे में पता करने के लिए एक आवेदन पत्र संवाद करने के लिए CORBA उपयोग कर सकते हैं पर काम कर रहा है unbalances। अगर मैं इसे C++ कंसोल एप्लिकेशन के रूप में चलाता हूं तो कोड ठीक काम करता है। हालांकि, मैं विधियों को एक डीएल के रूप में निर्यात करने पर अटक गया है। विधियां ठीक निर्यात करने लगती हैं, और यदि मैं कोई पैरामीटर के साथ कोई विधि कॉल करता हूं तो यह अपेक्षा के अनुसार काम करता है। मैं सी # स्ट्रिंग को सी ++ विधि में गुजरने पर लटका हूं।

मेरे सी ++ विधि हेडर कुछ इस तरह दिखता है:

इस प्रकार
bool __declspec(dllexport) SpiceStart(char* installPath) 

मेरे सी # DLL आयात कोड है:

bool success = SpiceStart(@"c:\sedatools"); 

:

[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)] 
private static extern bool SpiceStart(string installPath); 

मैं बहुत की तरह विधि कॉल स्पाइसस्टार्ट को कॉल अपवाद "PInvokeStackImbalance" को फेंक देता है, जो "संभवतः प्रबंधित PInvoke हस्ताक्षर नहीं करता है अप्रबंधित लक्ष्य हस्ताक्षर से मेल खाते हैं। "

क्या किसी के पास कोई सुझाव है? यदि मैं पैरामीटर से char * और स्ट्रिंग को हटा देता हूं, तो विधि ठीक ठीक चलती है। हालांकि, मैं आवेदन के इंस्टॉलेशन पथ को सी # से डीएल में पास करने में सक्षम होना चाहता हूं।

अग्रिम धन्यवाद,

Giawa

उत्तर

10

बुला सम्मेलनों मेल नहीं खाते।

extern "सी" bool __declspec (dllexport) __stdcall SpiceStart (चार * InstallPath)

+3

+1: C++ में, stdcall बुला सम्मेलन के साथ समारोह घोषणा करते हैं। या DllImportAttribute में कॉलिंग सम्मेलन निर्दिष्ट करें। –

+0

बिल्कुल सही - उसने नौकरी की! धन्यवाद – Giawa