Autor | Thema: profan und pb-dll | | Datum:29.12.01 17:49 
(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?
|
| | Datum:30.12.01 07:43 
(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
|
| | Datum:30.12.01 11:39 
(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
|
| | Datum:30.12.01 15:39 
(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
|
| | Datum: 30.12.01 16:21 
(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
|
|
|