2017-07-27 8 views
6

मैं एक शेयर कनेक्ट करने के लिए कोशिश कर रहा हूँ मान्य है (मान लें कि \ सर्वर \ फ़ोल्डर) अपने स्थानीय उपकरण एक्स के लिए:WNetAddConnection2 रिटर्न त्रुटि 1200 - स्थानीय नाम

[DllImport("Mpr.dll", CharSet = CharSet.Unicode, SetLastError = true)] 
     private static extern int WNetAddConnection2(
      [In] NetResource lpNetResource, 
      string lpPassword, 
      string lpUsername, 
      int flags 
     ); 

public static bool Connect(string remoteName, string localName, bool persistent) { 
      if (!IsLocalPathValid(localName)) return false; 
      var r = new NetResource 
      { 
       dwScope = ResourceScope.RESOURCE_GLOBALNET, 
       dwType = ResourceType.RESOURCETYPE_ANY, 
       dwDisplayType = ResourceDisplayType.RESOURCEDISPLAYTYPE_SHARE, 
       dwUsage = ResourceUsage.RESOURCEUSAGE_CONNECTABLE, 
       lpRemoteName = remoteName, 
       lpLocalName = localName 
      }; 
      return WNetAddConnection2(r, null, null, persistent ? 1 : 0) == 0; 
     } 

[StructLayout(LayoutKind.Sequential)] 
    public class NetResource { 
     public ResourceScope dwScope; 
     public ResourceType dwType; 
     public ResourceDisplayType dwDisplayType; 
     public ResourceUsage dwUsage; 
     public string lpLocalName; 
     public string lpRemoteName; 
     public string lpComment; 
     public string lpProvider; 
    } 

जब

Connect(@"\\server\folder", "X:", true); 

बुला फ़ंक्शन केवल झूठा लौटाता है - त्रुटि 1200 (BAD_DEVICE) कहती है। NetResource इस तरह दिखता है:

lpRemoteName = "\\\\server\\folder"; 
lpProvider = null; 
lpLocalName = "X:"; 
lpComment = null; 
dwUsage = Connectable; 
dwType = Any; 
dwScope = GlobalNet; 
dwDisplayType = Share; 

मैं पहले से ही कई के टुकड़े (PInvoke) डाल मैं कोई अंतर नहीं देख सकते हैं के साथ की जाँच। हो सकता है कि आप इस रहस्य को सुलझाने कर सकते हैं ...

EDIT1

Variables when trying to map the drive

+0

क्या नक्शा ड्राइव काम करता है यदि आप स्थानीय नाम नहीं देते हैं? यानी, 'लोकलनाम' को एक खाली स्ट्रिंग बनाएं। यह कुछ सुराग दे सकता है कि कोई अन्य समस्या है या नहीं। त्रुटि कोड 1200 का अर्थ है कि आपके "एक्स: \" के साथ कुछ सही नहीं है - क्या कोई अतिरिक्त जगह है (कृपया देखें - https://stackoverflow.com/questions/31137879/excel-to-sharepoint-mapnetworkdrive-error) – Subbu

+0

दुर्भाग्य से नहीं - त्रुटि 1200 बनी हुई है, यहां तक ​​कि एक स्थानीय ड्राइव निर्दिष्ट (खाली स्ट्रिंग) के बिना भी। आगे NetResource विवरण के लिए मेरा संपादन 1 देखें। (मुझे सर्वर का नाम साफ़ करना पड़ा, क्षमा करें। – C4p741nZ

उत्तर

3
[StructLayout(LayoutKind.Sequential)] 

है यही कारण है कि जहां समस्या शुरू कर दिया, विशेषता CharSet संपत्ति निर्दिष्ट नहीं है। डिफ़ॉल्ट CharSet.Ansi है, जो एक परेशानीपूर्ण विकल्प है जिसके लिए आपको एक समय मशीन में एक यात्रा की आवश्यकता होती है, जो आपको 1998 में वापस ले जाती है। इसलिए कोड स्ट्रिंग के साथ एक स्ट्रक्चर पास करता है जिसे 8-बिट अक्षरों में एक फ़ंक्शन में अनुवादित किया जाता है स्पष्ट रूप से समारोह के यूनिकोड स्वाद का उपयोग करता है। अनिवार्य रूप से कार्यान्वयन कचरा देखता है।

आप प्रत्येक व्यक्तिगत स्ट्रिंग सदस्य [मार्शल] के साथ मार्शलिंग को मजबूर कर सकते हैं। लेकिन यह चरित्र प्रकार मिलान करने के लिए बस सरल और तार्किक है। ठीक करें:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] 
+0

यही है, धन्यवाद! – C4p741nZ

1

मैं अंत में किया था।

मैं अपने NetResource वर्ग के अंदर हर स्ट्रिंग क्षेत्र के लिए

[MarshalAs(UnmanagedType.LPWStr)] 

गुण जोड़कर समस्या हल हो जाती। दुर्भाग्य से मैं नहीं जानता कि क्यों इस मुद्दे को हल कर रहा है ...

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