CreateHardLink_() is not a function, an array or a linked...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

CreateHardLink_() is not a function, an array or a linked...

Beitrag von uweb »

Hi,

Code: Alles auswählen

CreateHardLink_("test01.BMP", "test02.BMP", 0)
funktiert nicht.

Hat mir jemand einen Tipp wie ich es doch noch zum laufen bringe ?

http://msdn.microsoft.com/library/defau ... rdlink.asp
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Vermutlich wird der WinAPI-Befehl (bisher) nicht nativ unterstützt.
Wirst Du wohl über den Umweg mit LoadLibrary() die entsprechende M$-Dll öffnen und darüber die Funktion aufrufen müssen.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Danke !!!

Ich habe mit LoadLibrary() bisher noch nichts gemacht.
Aber, jetzt habe ich zumindest einen Ansatz.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Code: Alles auswählen

Enumeration
  #LinkToKernel32Lib
EndEnumeration

File01.s="test01.BMP"
File02.s="test02.BMP"

If OpenLibrary(#LinkToKernel32Lib, "kernel32.dll")
CHL = CallFunction(#LinkToKernel32Lib, "CreateHardLink", File01, File02, 0)

    If CHL
         MessageRequester("Ergebnis", "CreateHardLink_ ausgeführt")
    Else
         MessageRequester("Ergebnis", "CreateHardLink_ NICHT ausgeführt - Quelldatei vorhanden ?")
  EndIf 

EndIf
Ok, jetzt läßt es sich kompilieren.
Aber funktionieren will es noch nicht.
Da die EXE und test01.BMP im Hauptverzeichnis eines NTFS-Laufwerks liegen vermute ich den Fehler eher in einer nicht beachteten API-Konvention.
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 »

Laut MSDN lautet der Funktionsname "CreateHardLinkA" für ANSI
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
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Danke, aber am Ergebnis ändert das nichts.
Ich muß da noch einen anderen Fehler gemacht haben.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

manche api funktionsnamen sind unter pb geringfügig anders. da gab es manchmal einen prefix. ich glaube das hatte damit zu tun, dass purebasic irgendwelche bestandteile von lcc benutzt hat.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Tausch mal die Quell- mit der Zieldatei. Zieldatei darf nicht vorhanden sein.
Wie ts-soft schon schrieb : CreateHardLinkA nutzen .
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

Danke !

Leider konnte ich dazu nichts passendes finden.
Zwei neue Gedanken werfen zwei neue Fragen auf :

1. Zum letzten Parameter ( Reserved; must be NULL )
- Ist NULL in dem Fall gleich 0 ?

2. Funktioniert das bei jemand anderem ?

Code: Alles auswählen

Enumeration
  #LinkToKernel32Lib
EndEnumeration

File01.s="test01.BMP"
File02.s="test02.BMP"

If OpenLibrary(#LinkToKernel32Lib, "KERNEL32.DLL")
CHL = CallFunction(#LinkToKernel32Lib, "CreateHardLinkA", File01, File02, 0)

    If CHL
         MessageRequester("Ergebnis", "CreateHardLinkA_ ausgeführt")
    Else
         MessageRequester("Ergebnis", "CreateHardLinkA_ NICHT ausgeführt - Quelldatei vorhanden ?")
  EndIf 

EndIf
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Beitrag von uweb »

hallodri`s Tipp war der letzte Schritt zum Ziel.

Es funktioniert !

Danke noch einmal an alle.
Antworten