2010-09-28 20 views
6

पुनर्लेखन मैं VB में एक निम्न विधि घोषणा है और यह सी # में अनुवाद करने की जरूरत है:वीबी सवाल

<DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", _ 
    SetLastError:=True, CharSet:=CharSet.Unicode, _ 
    ExactSpelling:=True, CallingConvention:=CallingConvention.StdCall)> _ 
Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Int16) As Boolean 
End Function 

विशेष रूप से मुझे यकीन है कि अगर यह ByRef तर्क विनिर्देशक ref के बराबर है नहीं कर रहा हूँ सी # है।
मुझे यह भी नहीं पता कि Shared == static और क्या यह extern होना चाहिए। शायद आप में से बहुत से वीबी और सी # दोनों में कुशल हैं, इसलिए मैं सी # में सही घोषणा प्रदान करने के लिए आभारी हूं।

उत्तर

1

इस "translator" का उपयोग करना:

[DllImport("winspool.Drv", EntryPoint="OpenPrinterW", SetLastError=true, CharSet=CharSet.Unicode, ExactSpelling=true, CallingConvention=CallingConvention.StdCall)] 
public static extern bool OpenPrinter(string src, ref IntPtr hPrinter, Int16 pd) { 
} 

मुझे आशा है कि इस मदद करता है।

धन्यवाद, डेमियन

+2

यह सही नहीं है। कम से कम, यह 'बाहरी' गायब है और इसमें एक विधि शरीर बहुत अधिक है। –

+0

@ कोनराड: आप सही हैं। अधिक संदर्भ के बिना, अनुवादक को पता नहीं है कि कार्यान्वयन बाह्य है, क्योंकि यह DllImport को "गंभीरता" के रूप में नहीं लेता है। सही करने के लिए संपादन। –

1

विशेष रूप से मुझे यकीन है कि अगर यह ByRef तर्क विनिर्देशक ref के बराबर है सी # है नहीं कर रहा हूँ। मुझे यह भी नहीं पता कि Shared == static और क्या यह extern होना चाहिए।

हाँ, इन assumtions के सभी सही हैं:

[DllImport("winspool.Drv", EntryPoint="OpenPrinterW", 
    SetLastError = true, CharSet = CharSet.Unicode, 
    ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
public static extern bool OpenPrinter(string src, ref IntPtr hPrinter, Int16 pd); 

(वास्तव में, ByRef अनुरूप कर सकते हैं या तो ref या out लेकिन जब से मैं नहीं जानता कि यहां की आवश्यकता है जो मैं साथ जा रहा हूँ अधिक सामान्य ref - यह काम करने की गारंटी है)।

+0

यह * बाहर * [15 वर्ण] है –

0

एक महान अनुवाद उपकरण .NET परावर्तक है। विभिन्न भाषाओं में एक EXE या DLL इंजीनियर को बदलने का यह प्रयोग करें: http://www.red-gate.com/products/reflector/

वीबी

Class Demo 
    <DllImport("winspool.Drv", EntryPoint:="OpenPrinterW", SetLastError:=True, CharSet:=CharSet.Unicode, ExactSpelling:=True,CallingConvention:=CallingConvention.StdCall)> _ 
    Public Shared Function OpenPrinter(ByVal src As String, ByRef hPrinter As IntPtr, ByVal pd As Int16) As Boolean 
    End Function 
End Class 

सी #

internal class Demo 
{ 
    [DllImport("winspool.Drv", EntryPoint="OpenPrinterW", CallingConvention=CallingConvention.StdCall, CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)] 
    public static extern bool OpenPrinter(string src, ref IntPtr hPrinter, short pd); 
} 
0
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)] 
public static extern bool OpenPrinter(string src, ref IntPtr hPrinter, Int16 pd); 

यहाँ एक अच्छा रूपांतरण उपकरण है, इसे संभाल नहीं करता है सब कुछ, लेकिन यह बहुत अच्छा है।

http://www.developerfusion.com/tools/