Erstellen von .LNK (falsche Parameterübergabe) Wer hilft?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

Erstellen von .LNK (falsche Parameterübergabe) Wer hilft?

Beitrag von Peloka »

Das folgende Listing erklärt sich selbst.
Die Parameterübergabe bekomme ich aber nicht hin.
(.s,.s,.s,.s).l wie soll das gehen?

;das Programm ist lauffähig

Code: Alles auswählen

;erstellen einer Verknüpfungs Datei (.LNK)
;in PureBasic (Topos)
;peterlorenzkadow@compuserve.de

Ldll5$ = "vb5stkit.dll"
Ldll6$ = "vb6stkit.dll"

 sParent.s="" ;nur bei vb6stkit.dll notwendig
 fPrivate.l=0 ;nur bei vb6stkit.dll notwendig
 lpstrFolderName.s = "C:\" ;Link hier erstellen
 lpstsLinkName.s = "Install.lnk" ;Linkname
 lpstrLinkPath.s = "C:\BASIC\Install.EXE" ;zu verlinkende Datei
 lpstrLinkArguments.s = "" ;Argumente


Result = OpenLibrary(1, Ldll5$) ;.dll vb5stkit.dll öffnen
If Result=0
 Result = OpenLibrary(1, Ldll6$) ;.dll vb6stkit.dll öffnen
 If Result = 0
  Goto enddll
 Else 
  crfunk = IsFunction(1, "fCreateShellLink") ;prüfen an welcher Position Funktion vorhanden ist
  MessageRequester("Meldung",Ldll6$+" gefunden! "+Chr(10)+"Die Schnellzugriffs- Adresse lautet "+Str(crfunk),0)
  ;jetzt wird die Funktion zum erstellen des Link aufgerufen!
  ;Die Parameter sollen folgendes Format haben:
  ;(STRING,STRING,STRING,STRING,LONG,STRING)AS LONG
  ;Haben sie aber nicht! Wie bekomme ich das nur hin?
  Result = CallFunction(1,"fCreateShellLink",lpstrFolderName,lpstsLinkName,lpstrLinkPath,lpstrLinkArguments,fPrivate,sParent)
  ;Der Schnellzugriff würde wie folgt lauten:
  ;Result = CallFunctionFast(crfunk,lpstrFolderName,lpstsLinkName,lpstrLinkPath,lpstrLinkArguments,fPrivate,sParent)
  MessageRequester("Ergebnis","Die Funktion <fCreateShellLink> meldet: "+Str(Result),0)
  If Result = 0
   MessageRequester("Fehler","Funktionsaufruf fehlgeschlagen! ",0)
  EndIf 
 EndIf
Else 
 crfunk = IsFunction(1, "fCreateShellLink")
 MessageRequester("Meldung",Ldll5$+" gefunden! "+Chr(10)+"Die Schnellzugriffs- Adresse lautet "+Str(crfunk),0)
 ;jetzt wird die Funktion zum erstellen des Link aufgerufen!
 ;Die Parameter sollen folgendes Format haben:
 ;(STRING,STRING,STRING,STRING)AS LONG
 ;Haben sie aber nicht! Wie bekomme ich das nur hin?
 Result = CallFunction(1,"fCreateShellLink",lpstrFolderName,lpstsLinkName,lpstrLinkPath,lpstrLinkArguments)
 MessageRequester("Ergebnis","Die Funktion <fCreateShellLink> meldet: "+Str(Result),0)
 If Result = 0
  MessageRequester("Fehler","Funktionsaufruf fehlgeschlagen! ",0)
 EndIf 
EndIf
;----------------------------------------------------------------------------------------

dlfunk = IsFunction(1, "fRemoveShellLink") ;ermitteln der Zugrifsadresse der Funktion Link entfernen
If dlfunk =0
 MessageRequester("Fehler","Funktion Link entfernen <fRemoveShellLink> nicht gefunden!",0)
Else 
 MessageRequester("Meldung","Funktion Link entfernen <fRemoveShellLink> ist vorhanden an Adresse: "+Str(dlfunk),0)
 ;Aufruf der Funktion LINK ENTFERNEN
 ;auch hier der selbe Fehler (String,Sring).l
 Result = CallFunction(1,"fRemoveShellLink",lpstrFolderName,lpstsLinkName)
 ;Der Schnellzugriff würde wie folgt lauten:
 ;Result = CallFunctionFast(dlfunk,lpstrFolderName,lpstsLinkName)  ? mit bekannten Fehler
 MessageRequester("Fehler?","Der Aufruf der Funktion <fRemoveShellLink> meldet "+Str(Result)+" Warum ?",0)
EndIf  
CloseLibrary(1)
enddll:
End 
Wer kann helfen
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

Wenn da z.B. steht blabla(?????) AS LONG, dann bedeutet das, dass die Funktion einen Rückgabewert vom Typ Long hat.

Also aus blabla(a1.s, a2.s) AS LONG wird Long = blabla(a1.s, a2.s).

Verstanden?
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

fCreateShellLink(linkfold.s,linkname.s,linkpfad.s,Argum.s).l

Beitrag von Peloka »

Aufruf mit fCreateShellLink(linkfolder.s,linkname.s,linkpfad.s,Arguments.s).l
Rückgabewert =.l

Problem : Wie übergibt man 4 String als long
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Also wenn die Funktion einen String erwartet aber im Parameter steht,
dass die Funktion dort einen Long wert erwartet, dann muss man den
Pointer zu einem String übergeben. Der Pointer eines Strings wird mit
einem anführendem @ ermittelt.

Wenn die Funktion allerdings eine Long Zahl zurück gibt und ein String
erwartet wird, dann wird der String mit einem PeekS(Funktion()) zurück
gegeben.

fCreateShellLink(linkfolder.s,linkname.s,linkpfad.s,Arguments.s).l
Da wird dich der PB Compiler ordentlich an meckern. Du müsstest
das so schreiben:

procedure.l fCreateShellLink(linkfolder.s,linkname.s,linkpfad.s,Arguments.s)
wobei du das .l eigentlich auch weg lassen kannst, da dies der Standard-
wert für eine Rückgabe ist.
Bild
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

fCreateShellLink(linkfold.s,linkname.s,linkpfad.s,Argum.s).l

Beitrag von Peloka »

Das hat nicht geholfen.

Die Funktion fCreateShellLink der vb5stkit.dll erwartet laut Beschreibung
und API die Parameter (lpstrFolderName As String, lpstrLinkName As String, lpstrLinkPath As String, lpstrLinkArguments As String) as Long

Der Rückgabewert ist Long

Bei der vb6stkit.dll kommen noch ein Long und ein String Parameter in der Liste dazu.

Mein Problem ist die Parameterübergabe an die Funktion der .DLL
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ungetestet:

Code: Alles auswählen

Procedure.l CreateShellLink(strFolderName.s, strLinkName.s, strLinkPath.s, strLinkArguments.s)
  DLL = OpenLibrary(#PB_Any, "vb5stkit.dll")
  If DLL
    Result.l = CallFunction(DLL, "fCreateShellLink", @strFolderName, @strLinkName, @strLinkPath, @strLinkArguments)
    CloseLibrary(DLL)
  EndIf
  ProcedureReturn  Result
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

fCreateShellLink(linkfold.s,linkname.s,linkpfad.s,Argum.s).l

Beitrag von Peloka »

Ich habe den Code getestet. aber... der Rückgabewert sit nach wie vor =0
ein Link wurde nicht erstellt.

Auf Topos leuft dieser code nicht aber auf 3.9

Wo ist hier mein Denkfehler?
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Peloka
Beiträge: 34
Registriert: 16.01.2005 11:28

fCreateShellLink(linkfold.s,linkname.s,linkpfad.s,Argum.s).l

Beitrag von Peloka »

Problem nach Lib upd. gelöst.
:D
Ein Bit ist die kleinste Software-einheit, ein falsches Bit macht aus Software Bugware...
Antworten