Codeumwandlung oder umstieg nach VB?

Anfängerfragen zum Programmieren mit PureBasic.
Metaller
Beiträge: 37
Registriert: 01.11.2006 13:20

Beitrag von Metaller »

Vielen Dank. Jetzt komm ich schon wieder ein Stückchen weiter. Für die von Euch, die evtl. auch mal ein VB Programm umschreiben müssen, kommt hier eine kleine Erklärung:
Für einige Datentypen werden in Visual Basic an Variablennamen angehängte Typkennzeichen verwendet:

Currency @
Double #
Integer %
Long &
Single !
String $

Diese Art der Notation entstammt allerdings den älteren Versionen von Visual Basic und sollte deshalb vermieden werden.

Zur Verwendung:
Die Anweisungen Dim Meldung As String und Dim Meldung$ sind identisch, sie deklarieren die Variable Meldung als STRING - Variable.
The initialization_expression assigns the constant its never-changing value. You cannot use variables in the
initialization_expression, but you can use conversion functions such as CInt. You can also use the values
of previously defined constants and enumeration values. The expression can include type characters
such as # or &H, and if the declaration doesn’t include a type statement (and Option Explicit is off),
the type of the value determines the type of the constant.

The following code demonstrates these capabilities. The first statement uses the CInt function to convert
the value 123.45 into an integer constant. The second and third statements set the values of two Long
constants to hexadecimal values. The next statement combines the values defined in the previous two
using a bitwise Or. The final statement sets a constant to a value defined by the enumerated type
AccessLevel.

Code: Alles auswählen

Private Const MAX_VALUES As Integer = CInt(123.45)
Private Const MASK_READ As Long = &H1000&
Private Const MASK_WRITE As Long = &H2000&
Private Const MASK_READ_WRITE As Long = MASK_READ Or MASK_WRITE
Private Const MAX_ACCESS_LEVEL As AccessLevel = AccessLevel.SuperUs
Metaller
Beiträge: 37
Registriert: 01.11.2006 13:20

Beitrag von Metaller »

Bohje, ich krieg die Krätze :freak: :? Jetzt habe ich es zum x-ten Male umgeschrieben und es will einfach nicht klappen :twisted: Kann mir bitte einer von Euch mir eine DLL oder LIB aus dem Source (VB.net / ASM / BCB5 / C / C# / Delphi / Java / MFC / VB5/6) erstellen? Bitte, bitte, bitte :roll:

Vielen Dank...

PS: In dem Java Paket ist schon eine dll mit den Funktionen drin, aber ich weiß nicht wie ich darauf zugreifen kann.

PPS: Wenn keiner eine Lösung für mich hat, dann biete ich hier meine PB Version zum Verkauf an.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Keine Panik,

Must nur berücksichtigen das PB eine Procedure-Orientierte und VB eine Objekt-Orientierte Sprache ist. PB kann aber mit Objekten umgehen. Dafür gibt es im Forum viele Beispiele.

Jede Sprache hat auch ihre eigene Syntax.

- Konstanten werden ausserhalb von Proceduren ein geschrieben und fangen mit eine Raute "'#" an

#Wert1 = $FF
#Wert2 = 100
#Wert3 = 50.45
#Text1 = "Hallo Welt"

Automatische Vergabe gibt es auch
Enumeration
...
EndEnumeration

VB:
Dim Meldung$

PB:
Global Meldung$ oder Meldung.s

In Proceduren Protected, Static, Shared

Und so weiter.


Es gibt viele hier im Forum die Dir helfen bei den Einstieg in PB.
Einfach mal fragen.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Metaller
Beiträge: 37
Registriert: 01.11.2006 13:20

Beitrag von Metaller »

Danke für die Tipps, aber daran scheitert es leider nicht. Es liegt viel mehr an den Zeigerzuweisungen/-verbiegungen, den Memory-Routinen und "komischen" Strukturzuweisungen. Letzteres könnte ich noch selber hinbekommen, aber die andern beiden Sachen kosten mich den letzten Nerv.

Ich habe zurzeit Urlaub (=Ruhe+Zeit), wenn ich wieder arbeiten bin, dann kann ich die ganze Sachen knicken, denn dann bin ich fertig wenn ich nach Hause komme. Also werde ich mir ein Limit setzen. Wenn ich bis Morgen das mit PB nicht auf die Reihe bekomme, dann werde ich mir mein altes C++.net wieder draufspielen, auch wenn mich die Syntax "anko...." ;) Schade eigentlich, denn PB ist eigentlich super. Ich will auch nicht eine Mischung aus beiden haben.

Der Inline ASM ist auch einwenig dürftig. Damit kann man nicht mal Include's oder Invoke's machen. Wofür ist dann der ASM noch gut? Dann kann man auch gleich alles in PB schreiben. Das ist jetzt nicht böse gemeint, aber ich sehe keinerlei nutzen in dem Inline ASM.

Hmm, da fällt mir gerade was ein. Statt das üselige C++ zu nehmen, ziehe ich mir den MASM drauf. Kann ja nicht schwerer sein und meine µC'c progge ich auch ohne Probleme in ASM.

Wie gesagt, ich warte erstmal den nächsten Tag ab. Warten ist gut :mrgreen:
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Du kannst dir alles was PB nicht kann (alles ist etwas uebertrieben)
auch in anderen Sprachen schreiben und dann als Lib hinzulinken lassen.
Masm , Fasm, VC++ (nicht 2005) usw. bieten sich gerade dafuer an.
Z.B. benutze ich so die STL aus C++ unter PB.
Ob das allerdings sinnvoll oder doch einfacher ist, alles unter der
anderen Sprache zu schreiben, musst du selbst entscheiden.
Metaller
Beiträge: 37
Registriert: 01.11.2006 13:20

Beitrag von Metaller »

Mit so einer LIB oder DLL wäre mir schon geholfen, aber leider klappt das nicht so einfach. Damit ich z.B. aus dem C++ Quellcode, eine DLL mache, muß ich mich erstmal mit der Struktur und Funktion so einer DLL vertraut machen. Das ist ncht das Problem, aber wenn ich mich schon in die Materie einlesen, dann kann ich auch gleich damit weiter programmieren.

Würde jemand mir evtl. gegen ein Entgeld so eine DLL schreiben?

Wie sieht das denn mit Vista aus? Laufen da überhaupt noch DLL's oder ist das System komplett auf dem .net-Framework aufgebaut? Wie sieht das eigentlich mit PB aus, in Bezug auf Vista? Wenn PB-Programme nicht unter Vista laufen, dann muß man sich schon nach was neuem umsehen. Oder sehe ich das falsch?
Metaller
Beiträge: 37
Registriert: 01.11.2006 13:20

Beitrag von Metaller »

So, ich bin jetzt schon ein Stückchen weiter :) Ich werde die anderen Quellcodes nicht nach PB umschreiben, sondern ich werde Sie komplett neu schreiben. Das Prinzip bzw. die Funktion der Codes habe ich verstanden und denke, das ich das auch hinbekomme. Zwar werde ich diverse Strukturen weglassen, damit der Ablauf etwas vereinfacht wird. Später wird das Feature hinzugefügt, wenn es benötigt wird.

Frage1:
Wie kann man eine Bool-Abfrage (True/False) in PB realisieren? Ich habe es bis jetzt mit einer Variabelen gemacht, die entweder mit 1 oder 0 beschrieben wird und werte es mit einer IF-Anweisung aus. ist das der richtige Weg?

Frage2:
Ein kleines Vorwort, bevor ich die Frage stelle. Ich möchte auf ein externes Programm (Interface-Programm) zugreifen, welches ein Speicherabbild eines anderen Programmes hat. In dieses s.g. Interface-Programm kann ich Daten über Offset-Werte lesen und schreiben und mit einem anderen Befehl werden diese Daten dann an das eigentliche Programm gesendet.
Jetzt zur Frage. Muß man was bestimmtes beachten, wenn man Speicher für sein Programm reserviert und die Zeiger dafür einer Routine übergibt? Wie kann man ganze Strukturen einem Speicher übergeben, die auch noch eine unterschiedliche Länge haben?

Frage3:
Wie negiert man eine Funktionsabfrage aus einer IF-Anweisung? Beispiel: "IF ((NOT meineFunktion()) AND X)"

Schonmal vielen Dank für Eure Hilfe.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

zu 3 und vermutlich auch zu 1

Code: Alles auswählen

a=1
b=2
If Not a=b
 Debug "nicht gleich"
EndIf

If a=b
 Debug "gleich"
EndIf
die If Abfrage gibt natürlich was boolesches zurück
damit das anständig aussieht gibt es die vordefineierten Variablen #NULL,#FALSE,#TRUE,...

obiger Code überflüssigerweise geht auch so

Code: Alles auswählen

a=1
b=2
If (Not a=b) =#True
 Debug "nicht gleich"
EndIf

If (a=b) =#True
 Debug "gleich"
EndIf

If (Not a=b) =#False
 Debug "gleicher geht's nicht"
EndIf

If (Not(Not a=b)) =#False
 Debug "sowas von ungleich aber auch"
EndIf
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Metaller
Beiträge: 37
Registriert: 01.11.2006 13:20

Beitrag von Metaller »

Danke bobobo für die schnelle Antwort :)

Warum sollte ich schon wieder schreiben? ;) Klar ich habe da wieder eine kleine Frage. Könnte mir einer den Unterschied zwischen den beiden nachfolgenden Zeilen erklären?

Code: Alles auswählen

Global myVar.w
Define myVar.w
myVar.w
Sind die letzten beiden variabelen nur lokal, auch wenn sie am Anfang eines Programmes stehen? Ist vlt. "Define" auch eine globale Zuweisung, denn ich kann "Global Define myVar.w" nicht schreiben. Dann kommt eine Fehlermeldung.

Zusatzfrage:
Wie groß sollte eine Zeigervariabele sein? Größer oder kleiner als 32Bit macht doch kein oder etwa doch?

Vielen Dank, Ihr seit super :allright:
armada
Beiträge: 100
Registriert: 10.10.2005 18:00
Kontaktdaten:

Beitrag von armada »

im "Global" steckt das "Define" quasi schon drinnen...das brauchst du nicht extra
"Define" ist nicht zwingend notwendig, um eine variable zu definieren (außer du benutzt "EnableExplicit"). variablen die du mit "Define" erstellt hast sind nur lokal nutzbar (also quasi im hauptprogramm...für prozeduren benutzt du "Protected")
Antworten