PChar Structure in PureBasic

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

PChar Structure in PureBasic

Beitrag von legion »

Hallo liebe Basicfreunde !
Habe lange Zeit in Delphi programmiert und jede Menge Source und DLL's angehäuft. Wollte so eine Dll setzt in PB einbinden, komme aber mit der Structure nicht zurecht. Was nimmt man in PB für PChar (Pointer of Char)?

Wie würde diese Structure in PB aussehen ?

Type DiskInfo = packed record
FirmwareRev:PChar;
SerialNumber: PChar;
ModalNumber: PChar;
ECCByte: PChar;
Heads: PChar;
Sectors: PChar;
LBASector: PChar;
Bytes_Sector: PChar;
end;

Danke für eure Hilfe !
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Willkommen.

So wie ich das verstanden habe ist PChar ein Pointer auf eine Reihe von
Chars. Ich wuerde es ersteinmal ganz simpel mit einem String versuchen.

Code: Alles auswählen

Structure DiskInfo
  FirmwareRev.s
  SerialNumber.s
  ModalNumber.s
  ECCByte.s
  Heads.s
  Sectors.s
  LBASector.s
  Bytes_Sector.s
EndStructure
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Das hab ich schon getestet -> funktioniert leider nicht !
Beim Aufruf der Dll kommt sofort:
"Incorrect Number of Parameters"
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Was hat die Struktur mit der Anzahl der Parametern zu tun?
Was erwartet die DLL denn?

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

dieser fehler wird aber wohl kaum an den typen liegen.
poste doch mal den kopf einer aufzurufenden funktion und einen versuch von dir sie aufzurufen.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Danke für eure Unterstützung!
Ich habe die Dll mit dem Dll-Importer importiert und als lib abgelegt (ohne Fehler)! Mit dieser Dll ist es möglich, die Hardware-Seriennummer der Festplatte auszulesen. download unter:
http://www.amok.am/index.php?page=progr&id=24&lang=de
--------------------------------------------------------------------------------------
Structure DiskInfo
FirmwareRev.s
SerialNumber.s
ModalNumber.s
ECCByte.s
Heads.s
Sectors.s
LBASector.s
Bytes_Sector.s
EndStructure

DI.DISKINFO
info_(0,DI)
Debug DI\SerialNumber
End
------------------------------------------------------------------------------------------
DLL-Info:
==================================================
Function Name : about
Address : 0x00408324
Relative Address : 0x00008324
Ordinal : 1 (0x1)
Filename : getide.dll
Full Path : C:\Temp\getide.dll
==================================================

==================================================
Function Name : info
Address : 0x004081e0
Relative Address : 0x000081e0
Ordinal : 2 (0x2)
Filename : getide.dll
Full Path : C:\Temp\getide.dll
==================================================
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

#
Dll-Importer ..kenn ich mich nicht aus. hast du mal versucht direkt aus der dll zu laden?

#
versuchs mal mit info_(0,@DI)

#
'packed record' ist in object-pascal aber nicht zufällig sowas wie eine enumeration?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

info_(0,@DI) funktioniert nicht !
packed record entspricht möglicher weise einer StructureUnion in PB.
Hab ich auch schon getestet, leider kein Erfolg.
Aus der Dll direkt zu laden hab ich nicht versucht.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

:oops: StructureUnion, nicht Enumeration - hast recht

bei packed geht's glaub ich um gepackte speicherbereiche.
delphi-hilfe zu 'packed' hat geschrieben:Im Falle eines Zeichen-Arrays beeinflusst packed auch die Kompatibilität der Typen
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Code: Alles auswählen

Structure PChar
 *Pointer.c
EndStructure 

Structure DiskInfo
  FirmwareRev.PChar
  SerialNumber.PChar
  ModalNumber.PChar
  ECCByte.PChar
  Heads.PChar
  Sectors.PChar
  LBASector.PChar
  Bytes_Sector.PChar
EndStructure 
 
 DI.DISKINFO
 If OpenLibrary(0, "c:\temp\getide.dll")
 CallFunction(0, "Info",0,DI)
 EndIf
 Debug DI\SerialNumber

So funktioniert zu mindest der Zugriff auf die Speicheradresse !
Antworten