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-ID: 190499

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

Ausgedruckt am: 15.11.2024 um 21:11 Uhr

MonoTone
MonoTone 04.09.2012 um 09:15:39 Uhr
Goto Top
.. obwohl sie korrekt deklariert wurde.

Wie hast du sie denn deklariert?
MarcoBorn
MarcoBorn 04.09.2012 um 15:13:34 Uhr
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....
MonoTone
MonoTone 04.09.2012 aktualisiert um 15:39:43 Uhr
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.
MarcoBorn
MarcoBorn 04.09.2012 um 16:25:12 Uhr
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.
MonoTone
MonoTone 05.09.2012 um 10:18:22 Uhr
Goto Top
Es fehlt noch ein Shared.
Also Public(oder Private) Shared Function..
MarcoBorn
MarcoBorn 05.09.2012 um 12:50:05 Uhr
Goto Top
Vielen Dank, jetzt kann erhalte ich hier beim Compilieren keine Fehler mehr.