AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Interfaces, DLLs und Strings: Sharemem benötigt?
Thema durchsuchen
Ansicht
Themen-Optionen

Interfaces, DLLs und Strings: Sharemem benötigt?

Ein Thema von phreax · begonnen am 26. Okt 2007 · letzter Beitrag vom 26. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#1

Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 13:23
Hallo zusammen,
Ich hoffe ich habe die richtige Sparte erwischt.

Ich möchte Mittels eines Interfaces Datenstrukturen zwischen meiner Anwendung und einer Dll tauschen.

folgendes Interface:
Delphi-Quellcode:
type IMyException = interface
  ['{682DE719-6008-404D-8921-D648F35FC1D7}']
  function Msg: String; stdcall;
  function ErrorClassName: String; stdcall;
  function GetProcName: String;
  procedure SetProcName(Value: String);
  property ProcName: String read GetProcName write SetProcName;
end;
Die Anwendung soll nun darauf zugreifen können:
Delphi-Quellcode:
function GetLastError: IMyException; stdcall; external 'TestPlugin';
//...
ShowMessage(GetLastError.Msg);
Und in der DLL
Delphi-Quellcode:
var fLastError: IMyException;
//...
function GetLastError: IMyException; stdcall;
begin
  Result := fLastError;
end;
//...
  except
    on E: Exception do
      begin
        Result := False;
        fLastError := TMyException.Create(E);
      end;
  end;
Geht das jetzt ohne Sharemem? Die Interfacestrukturen enthalten ja Funktionen die Strings zurückgeben...
Oder ist das ganze durch die Interfaces so gekapselt, das die Memorymanager von DLL und Anwendung nicht ins Gehege kommen?
Bei Tests hat es jedenfalls funktioniert, aber es kann ja sein das ich mit dem Feuer spiele

Grüße phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 13:26
Du kannst auf WideString ausweichen, um das Speichermanagement auf Windows abzuschieben. Dadurch wäre ShareMem nicht mehr notwendig und auch die Bindung an Delphi wäre nicht mehr vorhanden.
Du kannst natürlich auch weiterhin ShareMem nehmen (oder in Echse & DLL FastMM4 als erste Unit benutzen).
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 13:42
Das mit Widestring hört sich gut an, denn ich will es vermeiden eine weitere DLL mit der Exe ausliefern zu müssen...

Aber wenn ich einfach alle Strings einfach durch WideStrings ersetze, bekomme ich interessante Strings zurück:
Eine Test-Fehlermeldung:
Zitat:
---------------------------
Pluginmain
---------------------------
Datei C:\Dokumente und Einstellungen\Eigene Dateien\???????????????????????????????? kann nicht geöffnet werden. Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch
---------------------------
OK
---------------------------
Woher kann denn soetwas kommen?

Grüße phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 13:46
entweder gibst du den WideString mit WideString-Komponenten aus oder du castest ihn vor der Ausgabe nach String.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 13:49
Zitat von Luckie:
entweder gibst du den WideString mit WideString-Komponenten aus oder du castest ihn vor der Ausgabe nach String.
Genau, man kann den UCS2-String aus einem WideString nicht immer einfach so indirekt als AnsiString nehmen. ein expliziter Cast ist oft genug, ansonsten gibt es die OleStr-blabla-Konvertierungen. (wirklich immer auf Unicode zu setzen macht aber IMO mehr Sinn.)
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 14:04
Danke für die schnellen Antworten
Doch egal, ob
OleStrToString(PWideChar(GetLastError.Msg)); oder
ShowMessage(AnsiString(GetLastError.Msg)); Das Ergebnis bleibt immer wie oben...
Zugewiesen wurde mit:
Delphi-Quellcode:
constructor TMyException.Create(E: Exception);
begin
  inherited Create();
  fProcName := '';
  fMessage := WideString(E.Message);
  fClassName := WideString(E.ClassName);
end;
Ich hoffe es gibt auch dafür eine Lösung...

grüße phreax
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 15:08
Öhm, kannst du mal bitte das Ganze mal so vereinfachen, dass wir es hier in unseren Delphis reproduzieren können?
Ich selbst bin schon ein "wenig" raus aus Delphi, es "klingelt"also gerade nicht bei mir...
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Benutzerbild von phreax
phreax

Registriert seit: 1. Mai 2006
Ort: Dresden
147 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 15:58
Der Fehler scheint nur im Zusammenhang meiner Anwendung aufzutreten...
Ich kann es also leider nicht aus dem Zusammenhang nehmen.
Daher die ganze "Proof of Concept" Anwendung im Anhang.
Einfach eine Datei öffnen, die nicht existiert und es kommt eine Fehlermeldung

Grüße phreax
Angehängte Dateien
Dateityp: zip plugininterface_546.zip (289,3 KB, 6x aufgerufen)
Und dann war da noch der junge Mann ....
... der unbedingt Schriftsteller werden wollte.
Er wollte Emotionen wecken und die Leute zum weinen bringen.
Sein Traum wurde wahr, er verfasst heute die Fehlermeldungen bei Microsoft!
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#9

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 16:09
phreax nutzt turbodelphi!
ich meine der fastmm ist dort der speichermanager, somit müsste das doch ohne sharemem bzw borlandmm gehen?!
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Interfaces, DLLs und Strings: Sharemem benötigt?

  Alt 26. Okt 2007, 16:10
Bei SavePerson kommt überhaupt kein gültiger Dateiname an, sondern nur Fragezeichen. Da stimmt schon was nicht. Die Ausgabe ist wahrscheinlich korrekt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:09 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