![]() |
Problem mit Strings in DLL
Guten Abend,
Wie bekomme ich es gebacken, Strings global verfügbar zu machen? Mein Ansatz bisher :
Delphi-Quellcode:
Das ist noch nicht ausgegoren, aber wann muss ich einen solchen String erstellen?
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. |
Re: Problem mit Strings in DLL
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
|
Re: Problem mit Strings in DLL
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.
|
Re: Problem mit Strings in DLL
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
![]() werde ich dann gleich das fertige Programm hochladen... moment |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz