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.