Parameterübergabe an Dll/userlib
Übersicht BlitzBasic Allgemein
Olaf_FranceBetreff: Parameterübergabe an Dll/userlib |
Mi, Feb 24, 2021 22:16 Antworten mit Zitat |
|
---|---|---|
Hallo
Ich habe ein paar Fragen zur Parameterübergabe an userlib-Funktionen und Daten-Handhabung 1. Sind (globale) Variabeln und Structures(Types), in einer Dll deklariert, auch im Hauptprogramm sichtbar? Oder muss ich Diese auch im Hauptprogramm deklarieren? 2. Wenn ich den Type sowohl im Hauptprogramm als auch in der Dll deklariere, muss der Datentyp Namensgleich sein, d.h. im Hauptprogramm Type abc Field x% End Type in der Dll Structure def x.i EndStructure Dll-Function : Procedure DoThis(var.def) Aufruf im Hauptprogramm : DoThis(var.abc) Da beide Structures/Types den gleichen Feldtyp und Grösse haben,würde das funktionieren? Ich denke, es wird doch nur die StartAdresse des Types übergeben, und da die Struktur des Types 'abc' und Die der Structure 'def' gleich sind, sollte es gehen, Oder???? Olaf |
||
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus |
Olaf_France |
Fr, Feb 26, 2021 17:07 Antworten mit Zitat |
|
---|---|---|
Hallo
Ich brauche ein paar generelle Infos zu dem Thema! bis jetzt habe ich ein paar userlib's für mich geschrieben, nach dem Muster: func#(a#,b%) Das war auch kein Problem! Nun soll es etwas umfangreicher werden,und dazu möchte ich mehrere Parameter übergeben, aber auch zurück erhalten. Dazu habe ich folgenden dll-Code geschrieben Code in PureBasic! Code: [AUSKLAPPEN] ProcedureDLL.i testpoint(*mry) ;ProcedureDll.i = sichtbare Function in Dll,.i = return integer
Protected wi.f,lng.f,cx.f,sy.f;*mry = zeiger auf Memory/Bank If MemorySize(*mry)>8 Or MemorySize(*mry)<8 Debug MemorySize(*memo) ProcedureReturn -1 ;ProcedureReturn = Return Else Debug "poken" wi=PeekF(*mry) lng=PeekF(*mry+4) cx=Cos(wi)*lng sy=Sin(wi)*lng PokeF(*mry,cx) PokeF(*mry+4,sy) ProcedureReturn 1 EndIf EndProcedure die .decls ist .lib "testmrylib.dll" testpoint(mry) der Code in B+ Code: [AUSKLAPPEN] ;Stop
ra#=50 wk#=0.64350110292435 memo=CreateBank(8) If BankSize(memo)>8 Or BankSize(memo)<8 Notify("ERROR!",1) Else PokeFloat(memo,0,wk) PokeFloat(memo,4,ra) EndIf testpoint(memo);wink,Radius an#=PeekFloat(memo,0) ge#=PeekFloat(memo,4) FreeBank(memo) Print"Radius="+ra Print"Ankathede="+an Print"Gegnkathede="+ge WaitKey() Das Prg brich tab sobald die lib-Function aufgerufen wird! was läuft da schief??? Olaf |
||
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus |
Thunder |
Do, März 04, 2021 13:28 Antworten mit Zitat |
|
---|---|---|
Ein Pointer enthält keine Information über die Größe des Speicherbereichs. Deswegen war ich schon Mal stutzig, dass du MemorySize darauf aufrufst. Wenn du in die PureBasic Dokumentation zu MemorySize schaust, steht da auch in der Beschreibung des Parameters:
Zitat: The address of the memory area to get the size from. This must be a value returned from either AllocateMemory() or ReAllocateMemory().
Edit: Link: https://www.purebasic.com/docu...ysize.html Dein Pointer kommt aber von einer B+ Bank, daher wird das Programm dort crashen. Die Moral von der Geschicht? Entweder du hardcodest die Größe des Speicherbereichs (und dokumentierst das am besten in einem Kommentar zu der Funktion), oder du übergibst einen extra integer für die Größe. |
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Olaf_France |
Do, März 04, 2021 15:34 Antworten mit Zitat |
|
---|---|---|
OOHH Sche...e!!!
Da hab ich jetzt einiges durcheinander geschmissen!! Test in PB ok ,klar is ne (im Test) globale MemoryVariable und dann structure/type und speicher(types sind in meinem kopf immer structuredMemory. also die Bank soll einen type abbilden,der hat als ersten eintrag seine grösse! aber wenn man diese nicht ausliesst,....... wäre ja schön,wenn man alles in einer Basic schreiben könnte, aber leider kann PureBasic nicht so gut mit Images wie BB,da ist BB immer noch besser!!! Auf der anderen Seite ist die Structure in PB besser ,da ich nicht automatisch eine list brauche Ohne 'Handle' und 'Object' wäre es in BB,für mich sehr schwer, den richtigen eintrag zu finden Pointer in PB, BB ??? Bon, Memorysize auslesen, dann klappt das auch mit der ... Danke Merci Olaf |
||
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus |
Thunder |
Do, März 04, 2021 16:22 Antworten mit Zitat |
|
---|---|---|
Gerne. Hast du schon BlitzMax oder Monkey probiert? Da kannst du die Typen auch ohne Linked List verwenden und zum Beispiel ein Array nehmen oder sie manuell in eine TList fügen. | ||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
Olaf_France |
Do, März 04, 2021 17:13 Antworten mit Zitat |
|
---|---|---|
Ich habe B-Max, aber ich bin damit noch nicht so 'warm' geworden.
Oop ist zwar kein Problem, aber irgendwie ist das 'Disign' von Max etwas gewöhnungsbedürftig. Ausserdem habe ich schon eine Sammlung an Routinen, die ich für die Userlib geschrieben habe, und somit B+ erweitern möchte via Lib's Olaf |
||
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus |
Übersicht BlitzBasic Allgemein
Powered by phpBB © 2001 - 2006, phpBB Group