AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Strings in DLL

Ein Thema von helgew · begonnen am 3. Aug 2008 · letzter Beitrag vom 3. Aug 2008
Antwort Antwort
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#1

Problem mit Strings in DLL

  Alt 3. Aug 2008, 01:03
Guten Abend,

Wie bekomme ich es gebacken, Strings global verfügbar zu machen?

Mein Ansatz bisher :

Delphi-Quellcode:
unit GlobalStrings;

interface
  uses
    windows;

type TGlobalString = packed record
  length: WORD;
  hMapObj: THandle;
end;



function SetGlobalString(str: String): TGlobalString;
function GetGlobalString(gstr: TGlobalString): String;
procedure FreeGlobalString(var gstr: TGlobalString);


implementation


function SetGlobalString(str: String): TGlobalString;
var
  pstr : PChar;
begin
  result.length := length(str);
  result.hMapObj := CreateFileMapping(
                INVALID_HANDLE_VALUE, // use paging file
                nil, // default security attributes
                PAGE_READWRITE, // read/write access
                0, // size: high 32-bits
                result.length, // size: low 32-bits
                'dllmemfilemap'); // name of map object

  pstr := MapViewOfFile(
                result.hMapObj , // object to map view of
                FILE_MAP_WRITE, // read/write access
                0, // high offset: map from
                0, // low offset: beginning
                0); // default: map entire file
  CopyMemory(pstr,@str[1],result.length);
end;

procedure FreeGlobalString(var gstr: TGlobalString);
begin
  if gstr.hMapObj <>0 then
  begin
    gstr.length := 0;
    CloseHandle(gstr.hMapObj);
    gstr.hMapObj := 0;
  end;
end;

function GetGlobalString(gstr: TGlobalString): String;
var
  pstr : PChar;
begin
  if gstr.hMapObj <> 0 then
  begin
    pstr := MapViewOfFile(
                gstr.hMapObj , // object to map view of
                FILE_MAP_READ, // read/write access
                0, // high offset: map from
                0, // low offset: beginning
                0); // default: map entire file
    result := string(pstr);
    setlength(result,gstr.length);
  end;
end;

end.
Das ist noch nicht ausgegoren, aber wann muss ich einen solchen String erstellen?
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#2

Re: Problem mit Strings in DLL

  Alt 3. Aug 2008, 02:20
ok, hatte garnichts damit zu tun. Wenn die dll natürlich vom System verwendet wird, sind keine Daten mehr von einem anderen Benutzer (Programm) vorhanden. Ich habe nun Message Broadcasts genutzt, um mit dem Hauptprogramm zu kommunizieren
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

Re: Problem mit Strings in DLL

  Alt 3. Aug 2008, 02:26
Du kannst Strings nicht einfach zwischen DLLs und Programmen verschieben (dazu braucht es FastMM4, ShareMem oder einen ähnlichen Memory Manager, der sowas erlaubt). Wenn du statt Strings einfach PChars verwendest, bist du auf der sicheren Seite: dann können nämlich Programme aller Sprachen deine DLL benutzen, nicht nur Delphi-Programme.
  Mit Zitat antworten Zitat
helgew

Registriert seit: 30. Jul 2008
125 Beiträge
 
#4

Re: Problem mit Strings in DLL

  Alt 3. Aug 2008, 02:33
Danke für den Hinweis. Das Problem ist jedoch weit schwerwiegender ( da braucht man ja auch immer ein Weilchen, bis mans rausgefunden hat. die Bibliothek beinhaltet keine dynamischen Variablen, das war mein Fehler. Da kann ich rummachen mit Strings, so viel ich will. unter

http://www.delphipraxis.net/internal...t.php?t=139471

werde ich dann gleich das fertige Programm hochladen... moment
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz