Allgemeine Fragen zur PROFAN Programmierung
Views (Heute): 249274 (10710)
  Suchen
 Zurück zur Übersicht
 AutorThema: profan und pb-dll
Stefan Stroehlein
Datum:29.12.01 17:49 Antwortenals Email verschicken (eMailTo@StefanStroehlein.de) 


ich versuche einer funktion in einer dll die icht mit dem pb/dll-compiler erstellte habe, paramter aus profan7 zu übergeben. ich erhalte aber ständig zugriffsverletzungen. ein aufruf dieser funktion ohne parameterübergabe funktioniert. was mache ich falsch?

'--------------- Profan7 Defination ----------------
Def @VariablenSetzen(3) !"C:\PBDLL61\Source\Hephaistos\DATEI.DLL", "VariablenSetzen"

--------------- Profan7 Aufruf ---------------------
frw& = @VariablenSetzen(serverlaufwerk$, serverpfad$, 8)

--------------- PD/DLL-Funktion -------------------
FUNCTION VariablenSetzen ALIAS "VariablenSetzen"(x1$, x2$, x%)EXPORT AS LONG
serverlaufwerk$ = x1$
serverpfad$ = x2$
produktini_dsl% = x%
FUNCTION = 0
END FUNCTION

aussderdem möchte ich wissen, wie man ein sub also eine procedur aus einer dll aufruft?


Thorsten
Datum:30.12.01 07:43 Antwortenals Email verschicken (mrk@mrk-soft.de) 


Naja,

Zum einem kannst du keine einfachen Strings von Profan aus
übergeben, sondern nur Adressen. ab Profan (glaub ab 7.0),
geht das mittels ADDR, also

frw& = @Vasetzen( addr(slaufwerk$), addr(spfad$), 8)

besser wären hier allerdings Bereichsvariablen:

frw& = @Vasetzen( slaufwerk# , spfad#, 8)

Nun kenne ich PB nicht, allerdings musst du beim beenden
der Funktion angeben, wieviele Parameter übergeben wurden

>aussderdem möchte ich wissen, wie man ein sub also eine
>procedur aus einer dll aufruft?

Du kanst keine Profan-Prodecure aus einem fremden Programm
aufrufen, da Profan keine "Nativer" Code ist. Das ist
NICHT möglich...

Thorsten




Rolf Wagner
Datum:30.12.01 11:39 Antwortenals Email verschicken (RolfWagner@WCK.de) 


Hallo,

für alle Profaner die sich nicht mit "PowerBasic DLL for Windows" auskennen:

pb/dll ist als EXE-Datei zwischen 3 und 23 mal schneller, die dll's bis zu 30000 mal kleiner als bei Visual Basic. Gegenüber Profan² mache ich lieber keine Angaben.

Um von Profan² aus auf pb/dll zuzugreifen habe ich hier einen Minimal-Code, auf dem aufgebaut werden kann:

Für pb/dll: (Diese 4 Zeilen als Addtwo.dll compilieren(ergibt 4.5KB)
#COMPILE DLL
FUNCTION Addtwo ALIAS "Addtwo" (BYVAL x AS LONG) EXPORT AS LONG
Addtwo=x+2
END FUNCTION

Für Profan²:
DEF @Addtwo(1) !"Addtwo","Addtwo"
Print AddTwo(5) ' Ausgabe: 7
Waitkey

Evtl. ist Dein Code nicht als DLL compiliert, o. a. Du hast ein 'defint a-z' geschrieben ...

Rolf



Rolf Wagner
Datum:30.12.01 15:39 Antwortenals Email verschicken (RolfWagner@WCK.de) 


Hallo,

damit es mit den Strings ebenfalls funktioniert, hier der etwas grössere Quellcode für die Pointer:

Für pb/dll:
#COMPILE DLL
FUNCTION Gettext ALIAS "Gettext" (BYVAL x AS LONG) EXPORT AS LONG
DIM a AS ASCIIZ PTR
Let a = x : message$ = @a
MSGBOX "Ergebnis: " & Message$
END FUNCTION

Für Profan²:
Declare a&, a$
DEF @Gettext(1) !"Gettext","Gettext"
Let a$="Profan"
Let a&=@Addr(a$)
Gettext(a&)
Waitkey

Somit kann Profan² auch Powerbasic ansprechen. Powerbasic ist eine starke Erweiterung für Profan², denn Powerbasic ist so schnell und so kurz wie 'C'.

Rolf




Stefan Stroehlein
Datum: 30.12.01 16:21 Antwortenals Email verschicken (eMailTo@StefanStroehlein.de) 


die antwort auf meine eigene frage:

FUNCTION DateiDllInitialisieren ALIAS "DateiDllInitialisieren" (BYVAL x1 AS STRING, BYVAL x2 AS STRING) EXPORT AS LONG
serverlaufwerk = x1
serverpfad = x2
END FUNCTION

jetzt habe ich aber das problem, dass ich einen string von pb/dll an profan zurück schicken will, erhalte aber nur irgend eine zahl. was ist jetzt wieder los? wenn es sich um einen pointer handelt, wie kann ich diesen in einen string um wandeln?

-------- PB/DLL FUNKTION
FUNCTION ProduktDatLesen ALIAS "ProduktDatLesen"(BYVAL dsnr AS LONG) EXPORT AS STRING

ON ERROR GOTO ProduktDatLesenFehler
GET #stream_produktdat, dsnr, produktdat_feld
FUNCTION = produktdat_feld
GOTO ProduktDatLesenEnde
ProduktDatLesenFehler:
FUNCTION = STR$((0 - ERR))
RESUME ProduktDatLesenEnde
ProduktDatLesenEnde:
ON ERROR GOTO 0
END FUNCTION



 Zurück zur Übersicht