Seite 1 von 1

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

Verfasst: 27.08.2005 00:46
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

Verfasst: 27.08.2005 00:54
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?

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

Verfasst: 27.08.2005 01:07
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

Verfasst: 27.08.2005 02:14
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.

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

Verfasst: 27.08.2005 11:00
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

Verfasst: 27.08.2005 12:20
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

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

Verfasst: 27.08.2005 13:45
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?

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

Verfasst: 29.08.2005 00:00
von Peloka
Problem nach Lib upd. gelöst.
:D