marcoborn
Goto Top

API-Funktion SetWindowRgn unter .NET nutzen

Hallo Forum,
in VBA habe ich die API-Funktion SetWindowRgn in einem Makro aufgerufen. Ich bin gerade dabei, für ein anderes Projekt Teile des Makros nach VB.NET zu portieren. Scheinbar wird die API-Funktion nicht aufgerufen, obwohl sie korrekt deklariert wurde. Gibt es in .NET eventuell eine .NET-Funktion, die die API kapselt? Oder muss ich weitere Befehle einsetzen, um auf die API zugreifen zu knnen?

Vielen Dank im voraus,
M. Born

Content-Key: 190499

Url: https://administrator.de/contentid/190499

Printed on: April 25, 2024 at 21:04 o'clock

Member: MonoTone
MonoTone Sep 04, 2012 at 07:15:39 (UTC)
Goto Top
.. obwohl sie korrekt deklariert wurde.

Wie hast du sie denn deklariert?
Member: MarcoBorn
MarcoBorn Sep 04, 2012 at 13:13:34 (UTC)
Goto Top
Deklaration:
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Ich habe sowohl die Deklaration als auch Teile des restlichen Codes aus Posts im Herber-Excel-Forum. Die Deklaration stimmt auch mit den Angaben aus dem API-Guide überein. In VBA hat sie problemlos funktioniert. Bin für jeden Hinweis dankbar....
Member: MonoTone
MonoTone Sep 04, 2012 updated at 13:39:43 (UTC)
Goto Top
Ich frage, weil sich die API Calls von VB6 zu .NET zum Teil unterscheiden.
Hintergrund ist der, dass sich die Datentypen leicht geändert haben.
VB6 Long -> VB.NET Integer.
VB6 Integer -> VB.NET Short.

Ich kann dir diese Seite ans Herz legen:
http://www.pinvoke.net/

für deine Frage: http://www.pinvoke.net/default.aspx/user32/SetWindowRgn.html
Dort steht auch die VB.NET schreibweise.
Die alte VB6/VBA schreibweise ist natürlich auch noch möglich.
Diese ist aber schöner ^^:

<DllImport("user32.dll")> _
Public Function SetWindowRgn(ByVal hWnd As Long, ByVal hRgn As IntPtr, ByVal bRedraw As Boolean) As Long
End Function

Zu finden mit einigen Infos auf der oben geposteten Webseite.
Member: MarcoBorn
MarcoBorn Sep 04, 2012 at 14:25:12 (UTC)
Goto Top
Vielen Dank für die schnelle Antwort. Leider bekomme ich jetzt beim Compilieren folgende Fehlermeldung:
"System.Runtime.InteropServices.DllImportAttribute kann nicht auf eine Instanzenmethode angewendet werden."

Ich hatte direkt den Code von Pinvoke kopiert und die alte Declare-Anweisung auskommentiert.
Member: MonoTone
MonoTone Sep 05, 2012 at 08:18:22 (UTC)
Goto Top
Es fehlt noch ein Shared.
Also Public(oder Private) Shared Function..
Member: MarcoBorn
MarcoBorn Sep 05, 2012 at 10:50:05 (UTC)
Goto Top
Vielen Dank, jetzt kann erhalte ich hier beim Compilieren keine Fehler mehr.