AGB  ·  Datenschutz  ·  Impressum  







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

DLL - Ungültige Zeigeroperation

Ein Thema von gordenfreeman2 · begonnen am 21. Okt 2006 · letzter Beitrag vom 21. Okt 2006
Antwort Antwort
gordenfreeman2

Registriert seit: 17. Mai 2004
60 Beiträge
 
Delphi 6 Enterprise
 
#1

DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:06
Hallo Leute, langsam aber sicher verzweifle ich, ich brauche eure Hilfe, ich komm und komm nicht auf den Fehler.

Ich schreibe gerade ein Prgramm, wo wenn ich mich einlogge dann soll der Browser gestartet werden mit einer bestimmten Seite.

Die Pfade des Browsers speichere ich in einer DLL die wie folt aussieht:

Delphi-Quellcode:
function checkBrowser(browser: string): string; stdcalL;
begin
  if (browser = 'Internet Explorer') then
    result := 'C:\Programme\Internet Explorer\iexplore.exe';
  if (browser = 'Mozilla FireFox') then
    result := 'C:\Programme\Mozilla Firefox\firefox.exe';
  if (browser = 'Mozilla') then
    result := '';
  if (browser = 'Opera') then
    result := 'C:\Programme\Opera\opera.exe';
  if (browser = 'Netscape') then
    result := '';
  if (browser = '') or (browser = 'Keinen') then
    result := '';
end;

exports
  checkBrowser;
Im Programm wo ich die DLL aufrufe und dem Übergebe welcher Browser ausgeführt werden soll sieht das ganze folgender Massen aus:

Delphi-Quellcode:
...
implementation

uses Unit1;

  function getUserId(name: string;passwort: string;form2:TForm2):integer;stdcall; external 'db1.dll';
  function checkBrowser(browser: string): string; stdcalL;external 'browser.dll';

In der Funktion TForm2.FormShow prüfe ich dann eben welcher Browser ausgewählt wurde bzw. ob der Benutzer gülitg ist oder nicht.

Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);
var
  pfadBrowser,pfadDatei: string;
  ppfadBrowser,ppfadDatei: pchar;
begin
  if (adoconnection1.Connected = true) then
  begin
    try
      benutzerid.text := inttostr(getUserId(benutzer.text,passwort.text,form2));
      if (benutzerid.text <> '-1') then
      begin
        pfadBrowser := checkBrowser(form2.browser.text);
        ppfadBrowser := pchar(pfadbrowser);

        pfadDatei := 'localhost/test.php';
        ppfadDatei := pchar(pfaddatei);

        ShellExecute(Form2.Handle, nil, ppfadBrowser, ppfadDatei, nil, SW_SHOWMAXIMIZED);
      end;
    except
      messagedlg('Fehler beim Einloggen.',mterror,[mbok],0);
      form2.close;
    end;
  end;
end;
Es wird alles richtig übergeben. Dennoch bekomme ich die Meldung "ungültige Zeigeroperation". Wenn ich dann bei der Fehlermeldung auf OK klick läuft das Programm normal weiter und es öffnet sich der Browser. Doch was mache ich falsch. Ich habe soviel Probleme mit den DLL's, und ich kann und kann keinen Fehler finde. Was mache ich falsch. Mit Bitte um Hilfe.



Danke.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:08
Weiß nicht, ob's daran liegt, aber möglich ist es: hast du die unit ShareMem als jeweils erste in sowohl DLL und .dpr des Projekts eingebunden? Andernfalls wird das nix mit String-Übergabe. Es sei denn, du verwendest z.B. FastMM4 (der kann das glaub ich).
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:10
Man sollte keine Delphistrings im Interface vonexportierten Dll-Funktionn verwenden. Und wenn schon müssen beide Teiel (Dll und aufrufendes Programm) ShareMem einbinden.
Markus Kinzler
  Mit Zitat antworten Zitat
gordenfreeman2

Registriert seit: 17. Mai 2004
60 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:13
Hey danke jetzt gehts, ich habe ShareMem eingebunden und jetzt geht es ohne Probleme , eine frage habe ich dann noch: Muss ich das auf für Integer übergabe machen oder ist die Unit für alles???

Tausend Danke für eure schnelle Hilfe.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:21
Zitat:
eine frage habe ich dann noch: Muss ich das auf für Integer übergabe machen oder ist die Unit für alles???
Diese Frage verstehe ich nicht.
Markus Kinzler
  Mit Zitat antworten Zitat
gordenfreeman2

Registriert seit: 17. Mai 2004
60 Beiträge
 
Delphi 6 Enterprise
 
#6

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:26
Naja ich meinte:

Wenn ich die Unit nicht einbinde wird der String ja nicht übergeben.

Mein Frage wäre:

Muss ich auch eine Unit einbinden wenn ich einen Integer übergebe????

Oder reserviert mit diese Unit für alle Datentypen den Speicherplatz????

Danke
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:29
Nein, diese Unit ist nur für (Delphi-)Strings notwendig alle anderen datentypen funktionieren bestens. Da eine solche Dll nur in Delphi nutzbar ist sollte man als Ersatz für Strings PChars nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
gordenfreeman2

Registriert seit: 17. Mai 2004
60 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: DLL - Ungültige Zeigeroperation

  Alt 21. Okt 2006, 19:31
Danke nochmals für die Hilfe, auf diesen Fehler wäre ich nie draufgekommen. Ihr seit einfach klasse.
  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:47 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