Zum Inhalt springen

Anfänger Probleme


matthiasr

Empfohlene Beiträge

Ich möchte mich mit VB befassen und bin gerade dabei meine erste Anwendung zu erstellen.

Ich programmiere bereits etwas in C/C++ und möchte behaupten das ich mich grundsätzlich auch in VB orientieren kann.

Nun denn meine Anwendung soll einige Werte aus der Regiestry auslesen und hierzu möchet ich die API-Funktion QueryValueEx verwenden. Hierfür habe ich in der MSDN auch ein sehr schönens Beispiel gefunden welches ich für meine Zwecke veränder habe. Ich weis auch schon das ich die Funktion extra deklarieren muss mit alias usw. aber ich bekomme immer wieder Fehlermeldungen wie "Konstanfen, Zeichenfolgen fester Länge, benutzerdefinierte Array und Declare-Anweisungen sind als öffentliche Mittglieder von Objektmodellen nicht zugelasen."

Was mache ich falsch???? Schaut Euch doch mal meinen Code an denn der sollte eigentlich dem aus dem Beispiel sinngemäß entsprechen. (Beispiel in der msdn "HOWTO: Use the Registry API to Save and Retrieve Setting"

Option Explicit

Public Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" _

(ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue _

As Long) As Long

Private Sub Form_Activate()

Const HKEY_CURRENT_USER = &H80000001

Const KEY_ALL_ACCESS = &H3F

Dim sKeyName As String

Dim lRetVal As Long 'result of the API functions

Dim hKey As Long 'handle of opened key

Dim vValue As Variant 'setting of queried value

lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)

lRetVal = QueryValueEx(hKey, sValueName, vValue)

RegCloseKey (hKey)

txtPrice = vValue

End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Ausdruck "Public Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" _

(ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue _

As Long) As Long" muss unbedingt in ein Modul und darf nicht in ein Formular gepackt werden (wie du es jetzt hast). Dann sollte es klappen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du auf Datei - Neu klickst, kannst du allerhand verschiedene neue Dinge anlegen, z.B. Formulare, Module und Klassenmodule. Ein Modul ist wie der Codebereich eines Formulars, nur eben ohne Formular. Sowas fügst du in dein Projekt ein. Module werden automatisch geladen und auch wieder entladen, darum musst du dich also nicht kümmern.

Deine API Deklaration musst du in ein solches Modul packen und dann unbedingt als Public deklarieren (hast du schon gemacht).

Dann klappt das ganze!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weis nicht, also ich bin über das Projekt-Fenster zu einem neuen Modul gelangt (Modul1) und in dem Prokjekt Pfad gibt es nun auch einen Pfad Modul. Ich habe dann auch die Declaration für die API's eingefügt (siehe unten) aber ich bekomme nun die Fehlermeldung " Sub oder Function nicht definiert".

Wo liegt den nun der Hammer begraben, und ich dachte VB sei leichter als C, da nutze ich einfach die Funktion binde vielleicht noch ne dll ein und fertig. Aber ich werd das schon noch schaffen, aber schau es Dir doch bitte nochmals an. Danke

Matthias

(Modul1)

Option Explicit

Public Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" _

(ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue _

As Long) As Long

Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _

(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long

(Fromular)

Option Explicit

Private Sub Form_Activate()

Const HKEY_CURRENT_USER = &H80000001

Const KEY_ALL_ACCESS = &H3F

Dim sValueName As String

Dim sKeyName As String

Dim lRetVal As Long 'result of the API functions

Dim hKey As Long 'handle of opened key

Dim vValue As Variant 'setting of queried value

MsgBox ("2")

lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)

lRetVal = QueryValueEx(hKey, sValueName, vValue)

RegCloseKey (hKey)

txtPrice = vValue

End Sub

Private Sub Form_Load()

MsgBox ("1")

End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also erstmal würde ich

Const HKEY_CURRENT_USER = &H80000001

und

Const KEY_ALL_ACCESS = &H3F

als Public deklarieren und auch ins Modul packen, also:

(Modul1)

Public Const HKEY_CURRENT_USER = &H80000001

Public Const KEY_ALL_ACCESS = &H3F

Dann: In deinem Form_Activate Ereignis gibst du ja garnicht an, welchen Registry Wert du auslesen möchtest. Du schreibst:

lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, sKeyName, 0, KEY_ALL_ACCESS, hKey)

lRetVal = QueryValueEx(hKey, sValueName, vValue)

Da stehen ja nur Variablen drin, die leer sind. Was soll VB denn nun aus der Registry auslesen?

Und nochwas: Wenn ein Fehler auftritt, klick einfach mal auf "Debuggen". Dann siehst du auch, in welcher Zeile der Fehler ist.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja die Funktionen sind noch nicht vollständig, aber die Function ist scheinbar immer noch nicht definiert.

Was fehlt mir dan noch????

Option Explicit

Private Sub Form_Load()

Dim sValueName As String

Dim sKeyName As String

Dim lRetVal As Long 'result of the API functions

Dim hKey As Long 'handle of opened key

Dim vValue As Variant 'setting of queried value

sKeyName = "Verdienst"

lRetVal = RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Indatec\\Questico", _

0, KEY_ALL_ACCESS, hKey)

lRetVal = QueryValueEx(hKey, sValueName, vValue)

RegCloseKey (hKey)

txtPrice = vValue

End Sub

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da kommt mir doch noch eine Frage. Wenn ich in C diese Funktion verwende da ist das Schlüsselwort HKEY_CURRENT_USER bekannt, ich brauch es nicht erst declarieren. Ist das normal in VB. Desweitern ist mir aufgefallen das ich bei RegOpenKeyEx den Rückgabewert abfangen muss, wenn ich das weglassen bekomme ich eine Fehlermeldung. Hat mich sehr überrascht.

Vieleicht kannst Du mir das auch etwas näher erklären.

Matthias

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du deklarierst die API als "RegOpenKey" und benutzt dann aber "RegOpenKeyEx", klar das dann ein Fehler kommt. Ändere das mal, nenne am besten die Deklaration "RegOpenKeyEx".

Das mit dem Rückgabewert ist seltsam, eigentlich sollte es auch ohne gehen. Ich hoffe du bedenkst, dass du ohne Rückgabewert keine Klammern machen darfst, Beispiel:

x = Function(Param)

oder

Function Param

Und API Konstanten sind VB generell unbekannt! Du musst leider alles erst deklarieren!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also bei Dir fühlt man sich als Anfänger wirklich aufgehoben, stimmt da habe ich nicht genau genug hingeguckt beim kopieren. Das man die Klammern weglassen kann, oder muss wusste ich nicht. Nun ruft aber die Heimat und ich kann es erst morgen testen würde mich aber freuen wenn ich mich wieder an Dich wenden kann.

Vielen Dank

Matthias

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...