C#-Code in Ansi C umwandeln



  • Hallo Leute,

    für meine DLL die ich erstellen soll benötige ich eine Fehlerbehandlung. Damit muss ich mit Windows kommunizieren, ob z.b. ein USB-Gerät abgesteckt wurde im laufenden Betrieb oder nicht. Also brauch ich "Detecting Attachment and Removal Notifications".
    Ich hab dazu einen C#-Code gefunden, bräuchte aber Hilfe wie der in ANSI C aussehen muss, da ich mich mit C# nicht auskenne.

    Ich war mir zwecks des Forums nicht genau sicher ob ich in Windows-API, C# oder C fragen muss und dachte hier isses am besten.

    Danke für die Hilfe und anregungen.

    internal const Int32 DBT_DEVTYP_DEVICEINTERFACE = 5;
    internal const Int32 DEVICE_NOTIFY_WINDOW_HANDLE = 0;
    internal const Int32 DIGCF_PRESENT = 2;
    internal const Int32 DIGCF_DEVICEINTERFACE = 0X10;
    internal const Int32 WM_DEVICECHANGE = 0X219;
    
    [ StructLayout( LayoutKind.Sequential ) ]
    internal class DEV_BROADCAST_DEVICEINTERFACE
    {
    internal Int32 dbcc_size;
    internal Int32 dbcc_devicetype;
    internal Int32 dbcc_reserved;
    internal Guid dbcc_classguid;
    internal Int16 dbcc_name;
    }
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    internal static extern IntPtr RegisterDeviceNotification
    (IntPtr hRecipient,
    IntPtr NotificationFilter,
    Int32 Flags);
    
    frmMy = this;
    DEV_BROADCAST_DEVICEINTERFACE devBroadcastDeviceInterface =
    new DEV_BROADCAST_DEVICEINTERFACE();
    IntPtr devBroadcastDeviceInterfaceBuffer;
    IntPtr deviceNotificationHandle;
    Int32 size = 0;
    // frmMy is the form that will receive device-change messages.
    internal frmMain frmMy;
    size = Marshal.SizeOf( devBroadcastDeviceInterface );
    devBroadcastDeviceInterface.dbcc_size = size;
    devBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
    devBroadcastDeviceInterface.dbcc_reserved = 0;
    devBroadcastDeviceInterface.dbcc_classguid = myGuid;
    devBroadcastDeviceInterfaceBuffer = Marshal.AllocHGlobal( size );
    Marshal.StructureToPtr
    ( devBroadcastDeviceInterface,
    devBroadcastDeviceInterfaceBuffer,
    true );
    
    deviceNotificationHandle = RegisterDeviceNotification
    ( frmMy.Handle,
    devBroadcastDeviceInterfaceBuffer,
    DEVICE_NOTIFY_WINDOW_HANDLE );
    Marshal.FreeHGlobal( devBroadcastDeviceInterfaceBuffer );
    


  • Bei WinAPI-Funktionen immer bei der MSDN schauen:
    RegisterDeviceNotification function
    Registering for Device Notification



  • Danke für die schnelle Antwort Th69, Aber dann hab ich doch dasselbe Problem von C++ auf Ansi C. Da die Beispiele ja bei MSDN immer für C++ ausgegeben sind. Oder wie geh ich da am besten vor?



  • Die meisten MSDN Beispiele sind Code der sich sowohl als C als auch als C++ übersetzen und ausführen lässt.
    Davon abgesehen hast du ein Beispiel in einer imperativen curly-brace Sprache, und ne Referenzdoku. Das sollte wohl ausreichend sein um den Code selbst runterzutippen, selbst wenn das Beispiel nicht 1:1 übernommen werden kann.

    Vorausgesetzt natürlich du kannst programmieren.


Log in to reply