Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

erstellte dll von purebasic mit freebasic ansprechen
Gehe zu Seite 1, 2, 3, 4  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 08.10.2006, 16:08    Titel: erstellte dll von purebasic mit freebasic ansprechen Antworten mit Zitat

hallo, ich werde jetzt mal mit einer dll arbeiten.
bloss möchte ich einmal wissen, wie ich unten erstellte dll mit freebasic ansprechen kann:

bei der ersten wird ein buffer.w übergeben, ist in freebasic short. als rückgabe erhalte ich eine long(4byte)

bei der zweiten übergebe ich ein string.

bei der dritten übergebe ich ein pointer für eine bestimmte anzahl von bytes und wieder ein buffer.w(2byte). den pointer möchte ich dann in freebasic auslesen.

wie kann kann man diese dll in freebasic ansprechen?


Code:

Global HCom.l
Global Chaine.s
Global los.s

ProcedureDLL.l  com_open_(buffer.w)
  BufferIn = buffer.w
  BufferOut = buffer.w
  Chaine="COM1:19200,N,8,1"
  HCom=ComOpen(Chaine,0 ,BufferIn,BufferOut)
  ProcedureReturn Hcom.l
EndProcedure

ProcedureDLL com_txd_text_(text.s)
  los.s = text +Chr(13) 
  ComWrite(HCom,@los,Len(los))
EndProcedure

ProcedureDLL com_rxd_(*BankPointer,buffer.w)
  ComRead(HCom,*bankpointer,buffer.w)     
EndProcedure
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
frogger



Anmeldungsdatum: 30.09.2006
Beiträge: 4

BeitragVerfasst am: 08.10.2006, 16:22    Titel: Antworten mit Zitat

mal ne frage. wieso bleibst du nicht gleich pei purebasic?
ich nehme mal an du hast die vollversion von PB?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 08.10.2006, 16:53    Titel: Antworten mit Zitat

ich habe die vollversion von purebasic, blitz3d und visualbasic pro 5.0 deutsch.
purebasic hat die ogre-grafik-engine eingebunden und die ist einfach zu unflexibel, die paar spritefunktionen die pure hat, kann ich in freebasic auch mit der opengl erstellen und habe dann für opengl auch vernünftige beschreibungen was für ogre bei pure nicht ist.
pure hat zwar für opengl, eine sogenannte pbi aber für glut und glu nicht, hat freebasic wieder. weiterhin sind viele einfache grafikbefehle vorhanden, die für mein roboterbau gut passen.

wenn ich bei pure mesh-dateien einlesen möchte, müssen diese alle erst in das ogre-format umgewandelt werden, das geht nicht von hand.

bei freebasic kann man eine mesh einfach einlesen und dem opengl-format anpassen und der körper ist fertig

freebasic ist einfacher zu bedienen und man steigt auch scheller durch.

ich könnte hier noch bis heute abend weitererzählen, was mich an pure stört. es ist nicht das gelbe vom ei, wie es immer vorgeschwärmt wird.


so und jetzt schau einmal, ob du mir helfen kannst.

irgendwo habe ich das schon einaml gelesen, weiss nur nicht mehr wo.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 08.10.2006, 17:10    Titel: Antworten mit Zitat

Wenn Purebasic Standard Gerechte DLLs erzeugt, sollte es gehen.

(Wenn du übrigens die DLL zum Ausprobieren bereit stellst, ist die Chance grösser schnell funktionierenden Code zu bekommen.)

Ein Gründsätzlicher Hinweiss:
Wikibooks

Anyway.
Da ich zu Faul bin, alles zu implementieren, ein Beispeil:
Code:
declare function com_open lib "Name der DLL oder so" alias "com_open_" (a as short) as long

Würde mich wundern, wenn das auf Anhieb klappt, aber ohne DLL zum Ausprobieren kann ich auch nur ratten.

Zitat:
bei der zweiten übergebe ich ein string.

Vorsicht, das könnte in Freebasic ein ZString sein.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 08.10.2006, 17:53    Titel: Antworten mit Zitat

wie wird denn ein pointer an eine dll übergeben?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 08.10.2006, 17:58    Titel: Antworten mit Zitat

pebisoft hat Folgendes geschrieben:
wie wird denn ein pointer an eine dll übergeben?

Als Any Pointer?

Also irgendwie
Code:
declare Function com_rxd lib "Name der DLL oder so" alias "com_rxd_" (a as any ptr, b as short)

Wobei ich mir nicht sicher bin ob Sub oder Function.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 08.10.2006, 18:35    Titel: Antworten mit Zitat

Für DLLs braucht man noch .dll.def dateien(oder so ähnlich).
Die kann man aber mit nem Tool, was bei FreeBASIC bei ist erstellen.
Sollte in irgendeinem ordner sein, einfach mal suchen happy
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
frogger



Anmeldungsdatum: 30.09.2006
Beiträge: 4

BeitragVerfasst am: 08.10.2006, 18:49    Titel: Antworten mit Zitat

@pebisoft
Was orge und 3D angeht hast du vollkommen recht.
Da müssen die entwickler noch einiges nachbessern.

Es soll jetzt kein glaubenskrieg entstehen aber in den meisten anderen punkten hat PB einen klaren vorsprung was den komfort,stabilität und die geschwindigkeit betrifft.
Was man in allen anderen sprachen mit opengl und direct3d machen kann geht auch problemlos mit purebasic.

kannst du mir einige GUTE deutsche opengl tut's nennen?
ich finde immer nur englische oder schlechte deutsche.

aber zu deiner frage...
purebasic erzeugt standart gerechte DLLs und es müsste auch mit freebasic möglich sein sie so aufzurufen wie alle anderen dlls.

aber mal ne frage an die erfahrenen von euch:
wie bekommt man diese dosbox weg, die immer auftaucht wenn man mit freebasic erzeugte exe startet?
sowas hab ich schon immer gehasst. das war auch damals in den amiga-zeiten immer ein hässliches nebenprodukt von den "früheren" basic sprachen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 08.10.2006, 18:53    Titel: Antworten mit Zitat

frogger hat Folgendes geschrieben:
wie bekommt man diese dosbox weg, die immer auftaucht wenn man mit freebasic erzeugte exe startet?
sowas hab ich schon immer gehasst. das war auch damals in den amiga-zeiten immer ein hässliches nebenprodukt von den "früheren" basic sprachen.

Ganz einfach: Du musst deine Programme mit der Compileroption -s gui compilieren. Dann erscheint kein Konsolenfenster. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 08.10.2006, 19:08    Titel: Antworten mit Zitat

Mein Vorschlag: Einen Thread erstellen, wo standard Sachen erklärt werden wie -s gui, netzwerk, etc....

Solche Fragen werden einfach zu oft gestellt, um keinen extra Thread anzulegen grinsen
_________________
Code:
#include "signatur.bi"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 08.10.2006, 20:09    Titel: Antworten mit Zitat

opengl/glu/glut für delphi. die begriffe brauchen nur ohne klammer übernommen werden und es läuft in freebasic.

http://wiki.delphigl.com/index.php/Hauptseite

hier sind die befehle von a-z in deutsch :

http://wiki.delphigl.com/index.php/OpenGL-Funktions%C3%BCbersicht


Zuletzt bearbeitet von pebisoft am 09.10.2006, 12:39, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 08.10.2006, 20:37    Titel: Antworten mit Zitat

ich habe eine ganz einfache dll in pure getestet :

Code:

Global ReturnString$
 
  ProcedureDLL.s MyFunction(var.s)
    ReturnString$ = var + " test"
    ProcedureReturn ReturnString$
  EndProcedure


und es kommt eine fehlermeldung. was bedeutet die?

undefined reference to `MYFUNCTION@4'

und dieses programm von freebasic verursacht die meldung:
Code:

DIM a AS string
a="test"

declare function MyFunction lib "free" (byval a as string) as string

SCREEN 18

print MyFunction(a)

SLEEP
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
terminate



Anmeldungsdatum: 12.09.2006
Beiträge: 56

BeitragVerfasst am: 09.10.2006, 04:26    Titel: Antworten mit Zitat

pebisoft hat Folgendes geschrieben:
ich habe eine ganz einfache dll in pure getestet :

Code:

Global ReturnString$
 
  ProcedureDLL.s MyFunction(var.s)
    ReturnString$ = var + " test"
    ProcedureReturn ReturnString$
  EndProcedure



Also eine 'ganz einfache dll' sieht aber anders aus, das einfachste was du machen kannst ist eine DLL, die dir erst mal anzeigt, dass deine DLL korrekt geladen und angesprochen werden kann. Das wäre dann auf der Purebasicseite z.B. nur ein Print "Hallo, hier DLL" oder eine Messagebox.

Das zweiteinfachste ist es zwei Zahlen zu addieren und das Ergebnis an Freebasic zurückzugeben.

Der nächste Schritt wäre dann einen String an die DLL zu übergeben diesen anzeigen zu lassen, zu verändern und wieder an Freebasic zurückzugeben.



Zitat:

und es kommt eine fehlermeldung. was bedeutet die?

undefined reference to `MYFUNCTION@4'

Der Name der Funktion stimmt nicht, eine Möglichkeit ist, den Funktionsnamen in Purebasic ebenfalls groß zu schreiben, eine andere Möglichkeit wäre ein ALIAS zu verwenden, (Grund: Ohne Alias übergibt Freebasic den Funktionsnamen immer in Uppercase und das passt dann natürlich nicht weil MYFUNCTION<>MyFunction)

Code:

declare function MyFunction lib "free" Alias "MyFunction" (byval a as string) as string


Wenn die gleiche Meldung dann immer noch kommt, heißt das, dass die pure basic dll den Funktionsnamen nicht richtig übergibt oder exportiert, in C würde das eventuell auf einen Tippfehler in der Funktionsdefinition oder der Headerdatei hindeuten.

Kleiner Tipp am Rande: Am Anfang alles so simpel wie möglich halten, sonst wird aus einem 'ganz einfachen' Beispiel schnell eine Gleichung mit sehr vielen Unbekannten, (liegts am Code, liegts am Compiler, habe ich einen Virus, falscher Treiber, ...., RAM kaputt?)

Zitat:

und dieses programm von freebasic verursacht die meldung:
Code:

DIM a AS string
a="test"

declare function MyFunction lib "free" (byval a as string) as string

SCREEN 18

print MyFunction(a)

SLEEP


Wäre wirklich ein Riesenzufall, wenn das dann auch gleich funktioniert, dazu müßten nämlich freebasic und purebasic dasselbe Stringformat verwenden, wäre zwar möglich ist aber nicht unbedingt wahrscheinlich.

Wenn man nicht weiß ob die Stringformate gleich sind, kann man sich immer noch auf einen ZString als kleinsten gemeinsamen Nenner einigen.
Und wenn man nicht weiß ob die dll überhaupt mit freebasic zusammen arbeitet, kann man so tun als würde man einem C Programm (freebasic) eine C DLL (purebasic) anbieten. Ich hab zwar keine Ahnung von purebasic, hab aber gelesen, dass Purebasic DLL Funktionen auch nach C Konvention bereitstellen kann. Dazu gibts in purebasic wohl die Schlüsselwörter:

ProcedureCDLL
DeclareCDLL


Wenn man nach C Konvention arbeitet, würden die drei oben von mir genannten Beispiele auf der freebasic Seite wie folgt aussehen, (bei nicht C Konvention einfach die cdecl weglassen):

Code:

'dll statisch laden
#inclib "mydllmain"
declare function mydllmain_are_you_here cdecl Alias "mydllmain_are_you_here" ()
declare function mydllmain_add_nums cdecl Alias "mydllmain_add_nums" (byval num1 as long,byval num2 as long)as long
declare function mydllmain_show_str cdecl Alias "mydllmain_show_str" (byval my_string as zstring ptr)


'dll zeigt einen String oder eine messagebox an
mydllmain_are_you_here()

'dll addiert zwei Zahlen und gibt das Ergebnis an Freebasic zurück
print mydllmain_add_nums(16,175)

'zstring mit der laenge 20 deklarieren
dim zs_teststring as zstring * 20

'zstring den Wert "freebasic zuweisen
zs_teststring= "freebasic"

'dll zeigt den Inhalt von zs_teststring an und verändert ihn
mydllmain_show_str(strptr(zs_teststring))

'neuen Inhalt von zs_teststring in FreeBasic anzeigen
print zs_teststring

sleep
end


Im übrigen wird in diesem Beispiel kein String an die DLL übergeben sonden nur ein Pointer auf ein ZString, die DLL bearbeitet also den Originalstring zs_teststring in Freebasic, diese Vorgehensweise ist meist unproblematischer, (natürlich auch schneller und speichersparender), als tatsächlich jedesmal einen String Zeichen für Zeichen an die DLL und dann wieder zurückzugeben.

Um Missverständnisse zu vermeiden die im Beispiel verwendete DLL heißt mydllmain.dll, dass die Funktionen ebenfalls alle mit mymaindll anfangen, (z.B. mydllmain_are_you_here()), ist reiner Zufall und verfolgt keine bestimmte Absicht, von der Möglichkeit bestimmte Funktionen später wieder einer bestimmten DLL zuordnen zu können, mal abgesehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 09.10.2006, 08:32    Titel: Antworten mit Zitat

hallo, vielen dank für deinen hinweis mit der ProcedureCDLL und den hinweis "cdecl", daran lag es.
die zahl 633 wird jetzt an freebasic übergeben und im screen ausgegeben.

bei der ausgabe vom string in freebasic wird nur eine 8stellige zahl ausgegeben, dieses ist gemäß aussage von pure ein zeiger.

wie kann ich jetzt den zeiger für freebasic zugänglich machen?
kannst du mir dabei helfen?


Code:

die dll von purebasic :

Global test.w
Global test1.s
 
  ProcedureCDLL.w testzahl()
    test=633
    ProcedureReturn test
  EndProcedure

ProcedureCDLL.s teststr()
    test1="pebisoft"
    ProcedureReturn test1
EndProcedure

ausgabe in freebasic :

#inclib "free"

declare function testzahl cdecl Alias "testzahl" ()
declare function teststr cdecl Alias "teststr" ()

SCREEN 18
print testzahl()
sleep
print teststr()

SLEEP
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
terminate



Anmeldungsdatum: 12.09.2006
Beiträge: 56

BeitragVerfasst am: 09.10.2006, 13:05    Titel: Antworten mit Zitat

pebisoft hat Folgendes geschrieben:
...
die zahl 633 wird jetzt an freebasic übergeben und im screen ausgegeben.


Also wenn deine DLL schon mal einen Wert zurückgibt, dann muß das auch in freebasic deklariert werden, sonst ist es nur Zufall, dass freebasic auch etwas anzeigt:
Code:

'damit freebasic weiss was 'word', (in purebasic .w ?), bedeutet:
#include "windows.bi"
declare function testzahl cdecl Alias "testzahl" () as word

'oder ohne "windows.bi"

declare function testzahl cdecl Alias "testzahl" () as long



Zitat:

bei der ausgabe vom string in freebasic wird nur eine 8stellige zahl ausgegeben, dieses ist gemäß aussage von pure ein zeiger.

wie kann ich jetzt den zeiger für freebasic zugänglich machen?
kannst du mir dabei helfen?


Edit:

Da kommt es jetzt eben darauf an inwiefern freebasic und purebasic Strings das selbe Format, (Stringdescriptor), verwenden. Wenn sich diese unterscheiden, funktioniert nur die ZString Methode, (es sei denn man nimmt 'any ptr' und weiß wie man den Stringdescriptor 'von Hand' bearbeitet', das heißt man bekommt von der DLL den Stringdescriptor oder einen Zeiger auf den Stringdescriptor, der Stringdescriptor enthält dann meist eine Längenangabe und einen Zeiger auf die tatsächlichen Stringdaten, (hört sich komplizierter an als es ist, wenn man permanent Strings mit purebasic austauschen will, wird man sich eben irgendwann die Mühe machen nachzulesen, wie der Stringdescriptor von purebasic aufgebaut ist.)

Code:

'Funktioniert vielleicht:
declare function teststr cdecl Alias "teststr" () as any ptr
dim p_mystring as any ptr
p_mystring=teststr()
print *p_mystring

'Funktioniert vielleicht:
declare function teststr cdecl Alias "teststr" () as string Ptr
dim p_mystring as string ptr
p_mystring=teststr()
print *p_mystring

'Funktioniert wenn in purebasic ein ZString verwendet wird:
declare function teststr cdecl Alias "teststr" () as zstring ptr
dim p_mystring as zstring ptr
p_mystring=teststr()
print *p_mystring


Wie ich schon sagte, ich verwende die umgekehrte Methode, ich übergebe meiner, (in Dev-C/C++ geschriebenen), DLL einen Pointer auf einen ZString innerhalb von freebasic, meine DLL bearbeitet dann den ZString auf den dieser Pointer zeigt, deshalb gibt meine DLL auch weder einen Pointer noch einen String zurück.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 09.10.2006, 13:19    Titel: Antworten mit Zitat

Also wenn deine DLL schon mal einen Wert zurückgibt, dann muß das auch in freebasic deklariert werden, sonst ist es nur Zufall, dass freebasic auch etwas anzeigt.

ich habe auch eine dll geschrieben mit einer addition test=45+67 usw

das ergebnis wird immer mit den printbefehl im zusammenhang mit der bestehenden aufgerufenen dll ausgegeben. ist kein zufall. ich nehme an, das als grundlegende variable bei freebasic integer bzw long genommen wird wenn keine angegeben wird.

auch nach einem neustart, wenn ich die freebasic-demo-dll starte kommen die ergebnisse.


Zuletzt bearbeitet von pebisoft am 09.10.2006, 13:37, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 09.10.2006, 13:27    Titel: Antworten mit Zitat

Wie ich schon sagte, ich verwende die umgekehrte Methode, ich übergebe meiner, (in Dev-C/C++ geschriebenen), DLL einen Pointer auf einen ZString innerhalb von freebasic, meine DLL bearbeitet dann den ZString auf den dieser Pointer zeigt, deshalb gibt meine DLL auch weder einen Pointer noch einen String zurück....

diese methode finde ich sehr interessant. muss mal schauen, wie ich in purebasic diese pointeradresse ansprechen kann um dann an dieser adresse daten abzulegen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
terminate



Anmeldungsdatum: 12.09.2006
Beiträge: 56

BeitragVerfasst am: 09.10.2006, 13:32    Titel: Antworten mit Zitat

pebisoft hat Folgendes geschrieben:
Also wenn deine DLL schon mal einen Wert zurückgibt, dann muß das auch in freebasic deklariert werden, sonst ist es nur Zufall, dass freebasic auch etwas anzeigt.

ich habe auch eine dll geschrieben mit einer addition test=45+67 usw

das ergebnis wird immer mit den printbefehl im zusammenhang mit der bestehenden aufgerufenen dll ausgegeben. ist kein zufall.


Nein ist kein Zufall, (da es ja reproduzierbar ist), ist aber Glück und beruht darauf, dass auch wenn explizit kein Rückgabetyp angegeben wird, standardmäßig immer entweder ein Integer oder ein Long zurückgegeben wird, so lange sich also alles in einem kleinen Teilbereich der 'ganzen Zahlen' abspielt funktioniert das irgendwie.
Auch ein Stringpointer kann selbstverständlich als Integer oder Long zurückgegeben werden, nur weiß dann Freebasic eben nicht, dass es sich um einen Strinpointer handelt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pebisoft
gesperrt


Anmeldungsdatum: 28.11.2004
Beiträge: 131

BeitragVerfasst am: 09.10.2006, 13:45    Titel: Antworten mit Zitat

kann man eigentlich auf einer dll mit 2 freebasicprogrammen zugreifen?

wenn ich eine pointeradresse in freebasic habe, zb : 14553456, wie könnte ich jetzt von freebasic auf diese reine zahlenadresse zugreifen mit einem anderen freebasicprogramm das nur diese zahl hat?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
terminate



Anmeldungsdatum: 12.09.2006
Beiträge: 56

BeitragVerfasst am: 09.10.2006, 14:16    Titel: Antworten mit Zitat

pebisoft hat Folgendes geschrieben:
kann man eigentlich auf einer dll mit 2 freebasicprogrammen zugreifen?

wenn ich eine pointeradresse in freebasic habe, zb : 14553456, wie könnte ich jetzt von freebasic auf diese reine zahlenadresse zugreifen mit einem anderen freebasicprogramm das nur diese zahl hat?


Prinzipiell ja z.B. mit Peek und Poke o.ä., hängt aber auch vom Betriebsystem ab, (ob es das abhängig von den Zugriffsrechten des Programmes zulässt), hab das seit win95/98 so nicht mehr ausprobiert.

Auf jedenfall könntest du mal probieren innerhalb von purebasic auf eine von freebasic übergebene ZString Pointeradresse mit peek und poke zuzugreifen.
Im ZString liegen die die einzelnen Zeichen des Strings nacheinander genau an der Adresse des ZString Pointers, das letzte Zeichen ist immer ein Nullbyte, chr$(0).
Natürlich muß man dabei aufpassen, dass man die Länge des ZStrings nicht aus den Augen verliert, also wenn der ZString 1024 Bytes lang ist, darf man maximal auf ZStringPointerAdresse+1024 mit peek und poke zugreifen.

Tatsächlich geht es dann nur bis ZStringPointerAdresse+1023, (also von 0 bis 1023 = 1024 Bytes), ob freebasic das Nullbyte als letztes Byte mitzählt oder nicht, hab ich gerade nicht im Kopf, im Zweifelsfall wäre man aber mit einem nutzbaren Bereich von ZStringPointerAdresse+1022 auf jeden Fall auf der sicheren Seite.

So dann muss ich mal wieder an die Arbeit.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3, 4  Weiter
Seite 1 von 4

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz