64 Bit Probleme im Programm
-
- Beiträge: 14
- Registriert: 08.03.2012 17:43
- Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)
64 Bit Probleme im Programm
Hallo zusammen,
ich habe mit PB 32Bit ein Programm geschrieben, welches die Consolanwendung "Tshark.exe" steuert und die Ausgabe verarbeitet.
In einem ersten Schritt wird "Tshark -D" abgesetzt um die aktiven Netzwerkinterfaces zu ermitteln.
In einem zweiten Schritt werden dann die Caputredaten live oder von Festplatte mittels Tshark untersucht und die Ergebnisse gesammelt.
Das alles funktioniert hervorragend mit einem in 32Bit kompilierten Programm (auch unter Win7 64Bit).
Jetzt möchte ich das Programm mittes PB 64Bit kompilieren und laufen lassen.
Nach dem Kompilieren und einem Programmstart bekomme ich keine Interfaces von Tshark, jedoch die Caputredaten (live oder Festplatte) werden angezeigt und verarbeitet).
Mauell, in einem Konsolfenster, funktioniert der Befehl "Tshark -D".
Tshark ist ein Programm, welches mit Wireshark(64Bit) installiert wird und verwendet die WPcap.dll (sowohl unter 32 und 64Bit).
In einem 32Bit-Systen und einem 64Bit-System ist die DLL immer die Gleiche (kein Versionsunterschied).
Beide PB-Versionen greifen auf die absolut gleiche DLL zu.
Ich verstehe nicht, warum das 64Bit-Programm nur die Interfaceausgabe unterschlägt;-(
Gruß
deichi1
ich habe mit PB 32Bit ein Programm geschrieben, welches die Consolanwendung "Tshark.exe" steuert und die Ausgabe verarbeitet.
In einem ersten Schritt wird "Tshark -D" abgesetzt um die aktiven Netzwerkinterfaces zu ermitteln.
In einem zweiten Schritt werden dann die Caputredaten live oder von Festplatte mittels Tshark untersucht und die Ergebnisse gesammelt.
Das alles funktioniert hervorragend mit einem in 32Bit kompilierten Programm (auch unter Win7 64Bit).
Jetzt möchte ich das Programm mittes PB 64Bit kompilieren und laufen lassen.
Nach dem Kompilieren und einem Programmstart bekomme ich keine Interfaces von Tshark, jedoch die Caputredaten (live oder Festplatte) werden angezeigt und verarbeitet).
Mauell, in einem Konsolfenster, funktioniert der Befehl "Tshark -D".
Tshark ist ein Programm, welches mit Wireshark(64Bit) installiert wird und verwendet die WPcap.dll (sowohl unter 32 und 64Bit).
In einem 32Bit-Systen und einem 64Bit-System ist die DLL immer die Gleiche (kein Versionsunterschied).
Beide PB-Versionen greifen auf die absolut gleiche DLL zu.
Ich verstehe nicht, warum das 64Bit-Programm nur die Interfaceausgabe unterschlägt;-(
Gruß
deichi1
Zuletzt geändert von deichi1 am 09.03.2012 21:06, insgesamt 3-mal geändert.
Re: PB 32Bit und 64Bit verhalten sich nicht gleich.
Ohne den Code selbst kann man leider nicht viel dazu sagen.
Vermutlich wirst du aber einfach eine Long als Integer oder andersrum deklariert haben, sodass sich zwischen 32Bit und 64Bit ein Strukturlängenunterschied ergibt
Vermutlich wirst du aber einfach eine Long als Integer oder andersrum deklariert haben, sodass sich zwischen 32Bit und 64Bit ein Strukturlängenunterschied ergibt
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- 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
Re: PB 32Bit und 64Bit verhalten sich nicht gleich.
PB verhält sich schon gleich, aber das OS oder diese Exe nicht.
Kann das leider nicht testen, somit bei der Fehlersuche nicht helfen,
möchte Dich aber bitten, den Titel anzupassen, da das ganze kein
PB Problem ist, wie der Titel suggeriert.
Gruß
Thomas
Kann das leider nicht testen, somit bei der Fehlersuche nicht helfen,
möchte Dich aber bitten, den Titel anzupassen, da das ganze kein
PB Problem ist, wie der Titel suggeriert.
Gruß
Thomas
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 14
- Registriert: 08.03.2012 17:43
- Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)
Re: 64 Bit Probleme im Programm
@ STARGÅTE:
vielen Dank für die schnelle Antwort. Leider ist der gesamte Code so groß (mehere 1000 Zeilen), dass es hier den Rahmen sprängt ihn einzubauen.
Mit Deinem Hinweis auf die Deklaration hast Du mich auf eine Idee gebracht, der ich nachgehen werde.
Wenn ich nicht erfolgreich bin melde ich mich wieder und dann müssen wir einen Weg finden, dass Du denrelevanten Code zu Gesicht bekommst.
Fürs Erste mal vielen Dank;-)
@ ts-soft:
sorry, es war nicht meine Absicht hier einen Fehler in PB darzustellen.
Habe den Titel angepasst.
Ist er so OK?
Gruß
deichi1
vielen Dank für die schnelle Antwort. Leider ist der gesamte Code so groß (mehere 1000 Zeilen), dass es hier den Rahmen sprängt ihn einzubauen.
Mit Deinem Hinweis auf die Deklaration hast Du mich auf eine Idee gebracht, der ich nachgehen werde.
Wenn ich nicht erfolgreich bin melde ich mich wieder und dann müssen wir einen Weg finden, dass Du denrelevanten Code zu Gesicht bekommst.
Fürs Erste mal vielen Dank;-)
@ ts-soft:
sorry, es war nicht meine Absicht hier einen Fehler in PB darzustellen.
Habe den Titel angepasst.
Ist er so OK?
Gruß
deichi1
- 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
Re: 64 Bit Probleme im Programm
deichi1 hat geschrieben:Ist er so OK?

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

-
- Beiträge: 14
- Registriert: 08.03.2012 17:43
- Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)
Re: 64 Bit Probleme im Programm
Hallo zusammen,
habe jetzt umfangreiche Tests gemacht und die entsprechenden Proceduren extrahiert, so dass es für jeden nachvollziehbar ist.
Der Beispielcode ist angehängt und auch ausreichend kommentiert.
Es handelt sich um zwei Proceduren, die beide gleich aufgebaut sind.
1. GetInterfaceList()
Sie soll via Tshark.exe -D die Liste der Interfaces ermiteln und im Debugfenster darstellen.
2. LiveCap()
Sie soll via Tshark.exe -i num die Daten vom aktiven Ethernetinterface lesen und im Debugfenster darstellen.
Die Nummer muss vor dem Start ermittelt und in Option2.s eingetragen werden.
Getestet habe ich die Proceduren unter folgenden Betriebssystemen:
XP32/PB32 V4.60
Win7 32/PB32 V4.60
Win7 64/PB32 V.60
Win7 64/PB64 V4.60
Die Ergebnisse:
XP32|PB32 V4.60
GetInterfaceList: funktioniert
LiveCap: funktioniert
Win7 32|PB32 V4.60
GetInterfaceList: funktioniert
LiveCap: funktioniert
Win7 64|PB32 V4.60
GetInterfaceList: funktioniert nicht
LiveCap: funktioniert
Win7 64| PB64 V4.60
GetInterfaceList: funktinoiert nicht
LiveCap: funktioniert
Verblüffend ist, dass nur die eine Routine (GetInterfaceList) unter 64Bit OS nicht will.
Wie schon erwähnt, über CMD funktioniert der Befehl.
Hat Irgendjemand eine Idee, was ich falsch mache oder was das am OS schräg sein könnte?
Habe wirklich keinen Plan mehr;-)
Gruß deichi1
habe jetzt umfangreiche Tests gemacht und die entsprechenden Proceduren extrahiert, so dass es für jeden nachvollziehbar ist.
Der Beispielcode ist angehängt und auch ausreichend kommentiert.
Es handelt sich um zwei Proceduren, die beide gleich aufgebaut sind.
1. GetInterfaceList()
Sie soll via Tshark.exe -D die Liste der Interfaces ermiteln und im Debugfenster darstellen.
2. LiveCap()
Sie soll via Tshark.exe -i num die Daten vom aktiven Ethernetinterface lesen und im Debugfenster darstellen.
Die Nummer muss vor dem Start ermittelt und in Option2.s eingetragen werden.
Getestet habe ich die Proceduren unter folgenden Betriebssystemen:
XP32/PB32 V4.60
Win7 32/PB32 V4.60
Win7 64/PB32 V.60
Win7 64/PB64 V4.60
Die Ergebnisse:
XP32|PB32 V4.60
GetInterfaceList: funktioniert
LiveCap: funktioniert
Win7 32|PB32 V4.60
GetInterfaceList: funktioniert
LiveCap: funktioniert
Win7 64|PB32 V4.60
GetInterfaceList: funktioniert nicht
LiveCap: funktioniert
Win7 64| PB64 V4.60
GetInterfaceList: funktinoiert nicht
LiveCap: funktioniert
Verblüffend ist, dass nur die eine Routine (GetInterfaceList) unter 64Bit OS nicht will.
Wie schon erwähnt, über CMD funktioniert der Befehl.
Hat Irgendjemand eine Idee, was ich falsch mache oder was das am OS schräg sein könnte?
Habe wirklich keinen Plan mehr;-)
Gruß deichi1
Code: Alles auswählen
;***********************************************************
;Vorbedingung:
;Es muss Whireshark in seiner neusest, stabilen Version installiert sein.
;Idealerweise unter einem 64Bit.OS und als 64Bit-Version
;Der Programmoutput beider Proceduren wird im Debugfenster ausgegeben.
;
;GetInterfaceList():
;Diese Procedure soll die Interfaceliste ermitteln und darstellen.
;
;LiveCap():
;Es werden die Daten vom Netzwerkinterface "1" eingeholt und dargestellt.
;Interface-1 ist meist das erste, aktive Ethernetinterface.
;***********************************************************
Option1.s = "-D"
;
;Die Zahl hinter dem -i bezeichnet das Interface von dem
;gelesen werden soll. Um die Zahl zu bekommen sollte entwerder
;die Procedure GetInterfaceList() ausgefürht werden oder man ermittelt
;sie via Tshark.exe mit der Option "-D"
;
Option2.s = "-i 1"
Procedure GetInterfaceList(Option1.s)
Option.s = Option1.s
Prog.s = "c:\programme\wireshark\tshark.exe"
ProgNum.q = RunProgram(Prog.s, Option.s, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If ProgNum
While ProgramRunning(ProgNum)
If AvailableProgramOutput(ProgNum)
Debug ReadProgramString(ProgNum)
EndIf
Wend
KillProgram(ProgNum)
CloseProgram(ProgNum)
EndIf
EndProcedure
Procedure LiveCap(Option2.s)
Option.s = Option2.s
Prog.s = "c:\programme\wireshark\tshark.exe"
ProgNum.q = RunProgram(Prog.s, Option.s, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)
If ProgNum
While ProgramRunning(ProgNum)
If AvailableProgramOutput(ProgNum)
Debug ReadProgramString(ProgNum)
EndIf
Wend
KillProgram(ProgNum)
CloseProgram(ProgNum)
EndIf
EndProcedure
;GetInterfaceList(Option1.s)
LiveCap(Option2.s)
- 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
Re: 64 Bit Probleme im Programm
Du nutzt ja immer dieselbe Exe? Sollte es da nicht 2 von geben. Und das mit den fixen Pfaden
ist hoffentlich nur zu Testzwecken, den Ordner ProgramFiles, sowie alle anderen Systemordner
sollte man immer per API feststellen.
Ansonsten, wenn es von der Shell aus klappt, schreib doch einfach eine Batch und starte die.
Nachtrag:
Das starten der Bildschirmtastatur unter Win 7 mit:
funktioniert auch nur mit einer Exe, die im selben Format compiliert wurde, wie das OS!
Ich vermute mal, es werden aufgrund der Wow64FsRedirection notwendige DLLs nicht gefunden,
folgender Code könnte Dir helfen:
ist hoffentlich nur zu Testzwecken, den Ordner ProgramFiles, sowie alle anderen Systemordner
sollte man immer per API feststellen.
Ansonsten, wenn es von der Shell aus klappt, schreib doch einfach eine Batch und starte die.
Nachtrag:
Das starten der Bildschirmtastatur unter Win 7 mit:
Code: Alles auswählen
RunProgram("osk")
Ich vermute mal, es werden aufgrund der Wow64FsRedirection notwendige DLLs nicht gefunden,
folgender Code könnte Dir helfen:
Code: Alles auswählen
Procedure DisableWow64FsRedirection(Flag)
If OSVersion() >= #PB_OS_Windows_Vista
Protected DLL = OpenLibrary(#PB_Any, "kernel32.dll")
Protected IsWow64, Result
If DLL
If CallFunction(DLL, "IsWow64Process", GetCurrentProcess_(), @IsWow64)
If IsWow64
Result = CallFunction(DLL, "Wow64EnableWow64FsRedirection", Flag ! 1)
EndIf
EndIf
CloseLibrary(DLL)
EndIf
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- Falko
- Admin
- Beiträge: 3535
- Registriert: 29.08.2004 11:27
- Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit) - Kontaktdaten:
Re: 64 Bit Probleme im Programm
Du schreibst folgendes:
Parametern aufrufst.
Theoretisch müsste das gleiche bei folgender Procedure funktionieren:
Vielleicht liegt das am Aufrufparameter -D, das es nicht funktionirt. Habe nichts
installiert um es testen zu können.
Gruß,
Falko
Wobei ich im ersten Blick sehe, das beide Procedure gleich sind und du sie mit veschiedenen;Die Zahl hinter dem -i bezeichnet das Interface von dem
;gelesen werden soll. Um die Zahl zu bekommen sollte entwerder
;die Procedure GetInterfaceList() ausgefürht werden oder man ermittelt
;sie via Tshark.exe mit der Option "-D"
Parametern aufrufst.
Theoretisch müsste das gleiche bei folgender Procedure funktionieren:
Code: Alles auswählen
Option1.s = "-i 1"
;...
GetInterfaceList(Option1)
installiert um es testen zu können.
Gruß,
Falko
-
- Beiträge: 14
- Registriert: 08.03.2012 17:43
- Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)
Re: 64 Bit Probleme im Programm
ts-soft;
das ist immer die gleiche EXE weil Wireshark als 64Bit App installiert ist.
Einen Test mit Wireshark 32Bit unter 64Bit OS habe ich nicht gemacht.
Es wird immer die gleiche wpcap.dll verwendet.
Die Jungs von Wireshark haben an der DLL und auch an den Zulieferprogrammen (Tshark.exe usw.) absolut nichts geändert.
Der fixe Pfad ist nur zum Test und zur Vereinfachung.
Aber warum funktioniert die gleiche EXE mit anderen Parameter?
Kann wohl kein Problem der DLL sein. Oder?
Wenn ich eine Batch verwende habe ich immer noch das Problem, dass ich die Ausgabe in mein Programm bekommen muss.
Den der Befehl "Tshark.exe -D > Test.txt" funktioniert schon garnicht.
Gruß
deichi1
das ist immer die gleiche EXE weil Wireshark als 64Bit App installiert ist.
Einen Test mit Wireshark 32Bit unter 64Bit OS habe ich nicht gemacht.
Es wird immer die gleiche wpcap.dll verwendet.
Die Jungs von Wireshark haben an der DLL und auch an den Zulieferprogrammen (Tshark.exe usw.) absolut nichts geändert.
Der fixe Pfad ist nur zum Test und zur Vereinfachung.
Aber warum funktioniert die gleiche EXE mit anderen Parameter?
Kann wohl kein Problem der DLL sein. Oder?
Wenn ich eine Batch verwende habe ich immer noch das Problem, dass ich die Ausgabe in mein Programm bekommen muss.
Den der Befehl "Tshark.exe -D > Test.txt" funktioniert schon garnicht.
Gruß
deichi1
-
- Beiträge: 14
- Registriert: 08.03.2012 17:43
- Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)
Re: 64 Bit Probleme im Programm
Hallo Falco,
das "D" muss groß geschrieben sein, das "d" eine andere Bedeutung hat.
Ich habe extra zwei Proceduren geschrieben, damit es deutlicher wird was ich meine.
Gruß
deichi1
das "D" muss groß geschrieben sein, das "d" eine andere Bedeutung hat.
Ich habe extra zwei Proceduren geschrieben, damit es deutlicher wird was ich meine.
Gruß
deichi1