2016-03-28 21 views
0

ich zwei verschiedenen Visual C# DLL erstellt habe, die Verwendung von DeviceIOControl Anrufen tätigen und ich habe sie wie unten definiert:Mit DevicIOControl mit VC#

In erster dll:

[DllImport("kernel32.dll", SetLastError = true)] 
static extern BOOL DeviceIoControl(
    HANDLE hDevice, 
    DWORD dwIoControlCode, 
    ref Internal_COMMAND lpInBuffer, 
    DWORD nInBufferSize, 
    ref ulong lpOutBuffer, 
    DWORD nOutBufferSize, 
    ref DWORD lpBytesReturned, 
    LPOVERLAPPED lpOverlapped); 

public struct Internal_COMMAND 
{ 
    public ulong Address; 
    public ulong Command; 
}; 

In zweiter dll:

[DllImport("kernel32.dll", SetLastError = true)] 
static extern BOOL DeviceIoControl(
    HANDLE hDevice, 
    DWORD dwIoControlCode, 
    ref char[] lpInBuffer, 
    DWORD nInBufferSize, 
    ref char[] lpOutBuffer, 
    DWORD nOutBufferSize, 
    ref DWORD lpBytesReturned, 
    LPOVERLAPPED lpOverlapped); 

Aber jetzt muss ich sie als eine einzige DLL innerhalb der gleichen Klasse machen. Also habe ich versucht das folgende zu benutzen.

[DllImport("kernel32.dll", SetLastError = true)] 
static extern BOOL DeviceIoControl(
    HANDLE hDevice, 
    DWORD dwIoControlCode, 
    ref char[] lpInBuffer, 
    DWORD nInBufferSize, 
    ref char[] lpOutBuffer, 
    DWORD nOutBufferSize, 
    ref DWORD lpBytesReturned, 
    LPOVERLAPPED lpOverlapped); 

als allgemeine Definition und übergab die Variablen durch Umwandlung von Struktur in Zeichen-Array. Aber der Fahrer nicht wie erwartet

Bitte leite mich mit dem korrekten Verfahren

+1

Was auf der Erde war der Punkt, nicht den Code, der wichtig ist ?? Werfen Sie diesen Code weg, es ist kaputt und völlig unnötig. Die C# -Sprache unterstützt Methodenüberladungen und funktioniert genauso gut, wenn sie über ein Attribut verfügen. –

+0

@HansPassant Hi ... Es funktioniert wie du sagtest Ich habe Methode Überladung verwendet .... Sorry, so dumm zu sein – hazzelnuttie

Antwort

0

-Methodenüberladung folgt nur gerade arbeitete als @Hans Passant darauf hingewiesen

Dies bedeutet, dass ich beiden Definitionen in einem einzigen verwenden kann .cs Datei und Methode Überladung wird wirksam, so dass die gleiche Funktion mit verschiedenen Parametern