2010-09-28 50 views
6

Tôi có một lời tuyên bố phương pháp sau đây trong VB và cần phải dịch nó sang C#:VB đến C# viết lại câu hỏi

<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 

Riêng tôi không chắc chắn nếu nó specifier ByRef đối số là tương đương với ref là C#.
Ngoài ra tôi không biết nếu Shared == static và liệu đó có phải là extern hay không. Có lẽ rất nhiều bạn thành thạo cả VB lẫn C#, vì vậy tôi rất biết ơn vì đã cung cấp khai báo chính xác trong C#.

Trả lời

1

Sử dụng này "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) { 
} 

Tôi hy vọng điều này sẽ giúp.

Cảm ơn, Damian

+2

Điều này không đúng. Ít nhất, nó thiếu 'extern' và có quá nhiều phương thức. –

+0

@Konrad: Bạn nói đúng. Nếu không có nhiều ngữ cảnh, người phiên dịch không biết thực hiện là bên ngoài, vì nó không mất DllImport là "nghiêm túc" như nó cần. Chỉnh sửa để sửa. –

1

Riêng tôi không chắc chắn nếu nó specifier ByRef đối số là tương đương với ref là C#. Ngoài ra tôi không biết nếu Shared == static và liệu đó có phải là extern hay không.

Vâng, tất cả các assumtions là chính xác:

[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); 

(Trong thực tế, ByRef có thể tương ứng với một trong hai ref hoặc out nhưng kể từ khi tôi không biết đó là cần thiết ở đây tôi đang đi với tổng quát hơn ref - điều này được đảm bảo hoạt động).

+0

Đó là * ra * [15 ký tự] –

0

Công cụ dịch thuật tuyệt vời là bộ phản xạ .NET. Sử dụng nó để thiết kế đối chiếu một EXE hoặc DLL sang ngôn ngữ khác nhau: http://www.red-gate.com/products/reflector/

VB

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 

C#

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); 

Có một công cụ chuyển đổi tốt ở đây, nó không xử lý tất cả mọi thứ, nhưng nó là khá tốt.

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