Speicherbereich für alle?

Für allgemeine Fragen zur Programmierung mit PureBasic.
strgalt
Beiträge: 63
Registriert: 30.08.2004 23:25

Speicherbereich für alle?

Beitrag von strgalt »

Naben zusammen,

Ich möchte mit Prog A etwas in den Speicher schreiben, und es per Pointer oder eben Adresse mit Prog B wieder auslesen.

Hab auch schon im Archiv gesucht, wurde aber nicht weiter ausgeführt, da in diesem Fall ein SendMessage_() ausreichte. Fällte bei mir aber flach.

Vielleicht hat ja jemand eine Idee.

Mit Dank im Voraus
Wer lesen kann, ist klar im Vorteil

MfG
strgalt
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Fragmente aus jaPBe:

Senden

Code: Alles auswählen

Procedure SendData(ziel,Type,adr,len)
  cd.COPYDATASTRUCT
  cd\dwData=Type
  cd\cbData=len
  cd\lpData=adr
  ProcedureReturn SendMessage_(ziel,#WM_COPYDATA,MainWin,cd)
EndProcedure
Empfangen (in windowcallback)

Code: Alles auswählen

case #WM_COPYDATA
      *cd.COPYDATASTRUCT=lParam
      Result=#False
      Select *cd\dwData
        Case #WMCD_InsertText
          SCI_BeginUndoAction()
          SCIReplaceText(SCI_GetSelectionStart(),SCI_GetSelectionEnd(),*cd\lpData,#True)
          Pos=SCI_GetCurrentPos()+*cd\cbData-1
          SCI_GotoPos(Pos)
          ColorWordUnderCursor=#True
          ColoringLine(#True,-1,SCI_LineFromPosition(Pos))
          ColorWordUnderCursor=#False
          If AutoInsert=#True
            ;SCI_SetAnchor(Pos)
            StartLine=SCI_LineFromPosition(Pos-*cd\cbData-1)
            EndLine=SCI_LineFromPosition(Pos)
            If StartLine<EndLine
              ChangeIndentationLines(StartLine-1,EndLine)
            EndIf
          EndIf
          SCI_EndUndoAction()
          Result=#True
        Case #wmCD_ReplaceCompleteText
          NoFoldChangeProtection=#True
          SCI_SetText(*cd\lpData)
          NoFoldChangeProtection=#False
          SCI_GotoPos(*cd\cbData-1)
          Result=#True
        Case #wmcd_ReplaceCurrentLine
          line=SCI_LineFromPosition(SCI_GetCurrentPos())
          SCIReplaceText(SCI_PositionFromLine(line),SCI_GetLineEndPosition(line),*cd\lpData,#True)
          SCI_GotoPos(SCI_GetLineEndPosition(line))
          Result=#True
        Case #wmcd_NewText
          NeedFreePanel()
          SCI_SetText(*cd\lpData)
          SCI_GotoPos(*cd\cbData-1)
          Result=#True
        Case #WMCD_OpenFile
          ;{Datei öffnen
          If *cd\lpData
            autoload$= PeekS(*cd\lpData,*cd\cbData)
            LoadSourceCodeReal(autoload$)
            AddRecentFile(autoload$)
            SetForegroundWindow_(MainWin)
            EnableWindow_(MainWin,#True)
            If IsZoomed_(MainWin)
              ShowWindow_(MainWin, #SW_MAXIMIZE)
            Else
              ShowWindow_(MainWin, #SW_RESTORE)
            EndIf
            Result=#True
          EndIf
          ;}
      EndSelect
      Result=#True
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
strgalt
Beiträge: 63
Registriert: 30.08.2004 23:25

Beitrag von strgalt »

Hallo,

ja, dass mit SendMessage is mir klar. Leider geht das nicht. Die Daten die ich da verschiffen will sind zu viele (können bis zu 700 000 Datensätze a 17 Felder sein). Außerdem spielt die WinProc da nicht mehr mit..... ääää, ist so, dass Prog A dann mitteilen muss ob es die Daten abgearbeitet hat und muss neue anfordern. Dann schickt Prog B wieder Daten rüber usw... Da hängts dann, weil zwischenher auch noch einiges gemacht wird. Die WinProc machte mit der SendMessage schon hier Probs, so dass ich schon mit PostMessage knallen muss.

Es geht leider nicht anders... ich muss von Prog A auf eine Adresse zugreifen, die ich in Prog B per GlobalAlloc - oder per PB - alloc. habe.

Ich hätt´s auch lieber ohne den ganzen Zinover, aber
1. kann PB zum einen nichteinmal auf 2 Stellen nachkommer richtig rechnen geschweige runden,
2. gibts kein Double, denn ich für einen Timestamp vom SQL- Server zu weiteren Berechnungen dringend brauche und
3. müssen die Daten eigentlich in Excel. XML langt für meine Sache nicht aus weil ich im Sheet Falten verwende, und auf die Excel- Lib kann man ja nicht zugreifen.

Also muss ich die Daten von PB nach VB verschieben, dort Pipifaxberechnungen vornehmen, die PB nicht kann (und wenns nur Kostenberechnungen sind), und von VB gehts halt dann weiter nach Excel.

Und wenn PB wenigstens nen Float und keinen Loati hätte, dann würde ich mich wahrscheinlich noch mit der Zwischenablage zufrieden geben... aber naja, mal guggen, wie lange Fred da noch drummherum redet "dass währe halt überall und immer so"... ja klar bei einer Genauigkeit von 4 B is mir das schon klar - ein Wohl auf QB und GW, die konnten das schon vor 20 Jahren.

Aber vielleicht fällt Dir (oder gerne auch Euch) ja zu dem ein oder anderem noch was ein... muss doch was geben, mit dem ich in der Lage bin, auf einen Speicherbereich zuzugreifen, der in einem anderen Programm alloc. wurde.
Wer lesen kann, ist klar im Vorteil

MfG
strgalt
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

mittels der process-library von mir isses möglich auf andere Programme Speicher zuzugreifen.
In Vb kannst du den allokieren und per Sendmessage den zeiger transferieren.


ach, wenn excel ne COM-DLL bereitstellt (und das macht sie) um auf ihre spalten/Zeilen etc. zuzugreifen, dann kann man auch mit PB darankommen. Such mal nach dem COM-IMPORTER von AXEND, irgendwo gibts da auch ein excel-gerüst:
http://purebasic.myforums.net/viewtopic.php?t=11031
Rings hat geschrieben:ziert sich nich beim zitieren
strgalt
Beiträge: 63
Registriert: 30.08.2004 23:25

Beitrag von strgalt »

@Rings

ja, dass währe schon mal nicht schlecht wenn das mit der Lib funzt... Nur kann ich keine UserLibs einbinden wenn ich den Source nicht hab.

Da ich annehme das du den Source für dich behalten willst (oder vielleicht helfen auch ein paar Taler :) ) würde ich mich auch mit n´paar Tipps oder so zufrieden geben.
Wer lesen kann, ist klar im Vorteil

MfG
strgalt
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

strgalt hat geschrieben:@Rings

ja, dass währe schon mal nicht schlecht wenn das mit der Lib funzt... Nur kann ich keine UserLibs einbinden wenn ich den Source nicht hab.

Da ich annehme das du den Source für dich behalten willst (oder vielleicht helfen auch ein paar Taler :) ) würde ich mich auch mit n´paar Tipps oder so zufrieden geben.
hast du denn den Source der PB-Libs ?
Rings hat geschrieben:ziert sich nich beim zitieren
strgalt
Beiträge: 63
Registriert: 30.08.2004 23:25

Beitrag von strgalt »

@Rings
ne, und drumm schau ich, dass ich möglichst wenig rein nimm, wo ich nichts von hab.
Hab jetzt mal n bissl mit DDE rumgetan.... sollte auch funzen... Aber hätte mir da schon zumindest nen Tipp erwartet :shock:
Wer lesen kann, ist klar im Vorteil

MfG
strgalt
Antworten