Allgemeine Fragen zur PROFAN Programmierung

Views (Heute): 249274 (10710)

| Suchen
| Zurück zur Übersicht

Autor | Thema: profan und pb-dll
Stefan Stroehlein
| 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?
Thorsten
| 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
Rolf Wagner
| 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
Rolf Wagner
| 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
Stefan Stroehlein
| 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

| Zurück zur Übersicht