c# - DLLImport with char * arguments. Only one character being passed -


मैंने सी + + डीएलएल लिखा है, जो निम्न फ़ंक्शन निर्यात किया गया है

  extern "c" bool WINAPI SetUserPassword (const char * u, const char * p)   

जब इसे सी # से कॉल करता हूं मैं निम्नलिखित कोड का उपयोग कर रहा हूं

  [DllImport ("mydll .dll ")] निजी स्थिर extern int SetUserPassword (स्ट्रिंग उपयोगकर्ता, स्ट्रिंग पासवर्ड);   

अब जब SetUserPassword कहा जाता है, तो मुझे केवल प्रत्येक पैरामीटर का पहला अक्षर मिलता है। मैंने कुछ घुमावदार किया और पाया कि स्ट्रिंग संभवतः इंटपीट्र और Marshal.StringToBSTR () का उपयोग करने की कोशिश में सबसे अच्छा नहीं था, लेकिन यह या तो काम नहीं करता।

यह कैसे ठीक से संरचित किया जाना चाहिए? यदि आवश्यक हो तो मैं सी + + डीएलएल को संशोधित कर सकता हूं।

केवल एक चीज जो समझ में आती है वह है आपकी सी # कोड वास्तव में है:

  [DllImport ("mydll.dll", चारसेट = यूनिकोड)] निजी स्थिर extern इंट SetUserPassword (स्ट्रिंग उपयोगकर्ता, स्ट्रिंग पासवर्ड);   

जब आप ऐसा करते हैं, तो आप अपने सी ++ कोड के लिए एक विस्तृत वर्ण आधारित स्ट्रिंग पास करते हैं और चूंकि यह एकल बाइट वर्णों की अपेक्षा करता है, यह पहली बाइट वर्ण के दूसरे छमाही में 0 बाइट की व्याख्या करता है स्ट्रिंग टर्मिनेटर।

आपको लिखना चाहिए:

  [DllImport ("mydll.dll", चारसेट = एएनएसआई)] निजी स्थिर extern int SetUserPassword (स्ट्रिंग उपयोगकर्ता, स्ट्रिंग पासवर्ड) ;   

या वास्तव में आप इसे अपने प्रश्न के रूप में लिख सकते हैं क्योंकि Ansi डिफ़ॉल्ट है।


और वास्तव में यह पता चलता है कि आप CE पर हैं, जो Ansi चरित्र सेट का समर्थन नहीं करता है और इसलिए केवल एक उचित समाधान है कि आपका C ++ कोड व्यापक वर्ण स्ट्रिंग स्वीकार करता है।

Comments

Popular posts from this blog

mysql - BLOB/TEXT column 'value' used in key specification without a key length -

c# - Using Vici cool Storage with monodroid -

python - referencing a variable in another function? -