AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit DLL-Dateien...

Ein Thema von dopeline · begonnen am 4. Feb 2004 · letzter Beitrag vom 10. Mär 2004
 
dopeline

Registriert seit: 7. Mär 2003
Ort: Berlin
304 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit DLL-Dateien...

  Alt 4. Feb 2004, 12:36
Hallo!

ich habe folgende DLL-Datei:
Delphi-Quellcode:
library pwv;


uses
  ShareMem, SysUtils, Classes, Grids;

{$R *.res}


// Sortiert das StringGrid "GenStrGrid" im der Spalte "ThatCol"

procedure SortGrid(var GenStrGrid: TStringGrid; ThatCol: Integer); stdcall;
const
  // Define the Separator
  TheSeparator = '@';
var
  CountItem, I, J, K, ThePosition: integer;
  MyList: TStringList;
  MyString, TempString: string;
begin

  // Give the number of rows in the StringGrid
  CountItem := GenStrGrid.RowCount;
  //Create the List
  MyList := TStringList.Create;
  MyList.Sorted := False;
  try
    begin
      for I := 1 to (CountItem - 1) do
        MyList.Add(GenStrGrid.Rows[I].Strings[ThatCol] + TheSeparator +
          GenStrGrid.Rows[I].Text);
      //Sort the List
      Mylist.Sort;

      for K := 1 to Mylist.Count do
      begin
        //Take the String of the line (K – 1)
        MyString := MyList.Strings[(K - 1)];
        //Find the position of the Separator in the String
        ThePosition := Pos(TheSeparator, MyString);
        TempString := '';
        {Eliminate the Text of the column on which we have sorted the StringGrid}
        TempString := Copy(MyString, (ThePosition + 1), Length(MyString));
        MyList.Strings[(K - 1)] := '';
        MyList.Strings[(K - 1)] := TempString;
      end;

      // Refill the StringGrid
      for J := 1 to (CountItem - 1) do
        GenStrGrid.Rows[J].Text := MyList.Strings[(J - 1)];
    end;
  finally
    //Free the List
    MyList.Free;
  end;
end;


// Löscht die Zeile "RowNumber" des StringGrids "Grid", die gerade markiert ist

procedure GridDeleteRow(RowNumber : Integer; Grid : TStringGrid);stdcall;
var
  i : Integer;
begin
  Grid.Row := RowNumber;
  if (Grid.Row = 0) then else
  If (Grid.Row = Grid.RowCount -1) then
  begin
    Grid.RowCount := Grid.RowCount - 1;
  end
  else
  begin
    for i := RowNumber to Grid.RowCount - 1 Do
    begin
      Grid.Rows[i] := Grid.Rows[i+ 1];
    end;
    Grid.RowCount := Grid.RowCount - 1;
  end;
end;

exports
 SortGrid,
 GridDeleteRow;

begin
end.
Die Datei ("pwv.dll") wir im Programm eingebunden:
Delphi-Quellcode:
unit UHaupt;

interface

uses
// ...

type
// ...

  procedure SortGrid(var GenStrGrid: TStringGrid; ThatCol: Integer); stdcall;
  procedure GridDeleteRow(RowNumber : Integer; Grid : TStringGrid); stdcall;

implementation

{$R *.DFM}

 procedure SortGrid(var GenStrGrid: TStringGrid; ThatCol: Integer); stdcall;
  external 'pwv.dll';
 procedure GridDeleteRow(RowNumber : Integer; Grid : TStringGrid); stdcall;
  external 'pwv.dll';
Und So werden Sie zur Laufzeit aufgerufen:SortGrid(SGP, Column) //SGP ist der Name des StringGrids und Colum ist die Spalte ; GridDeleteRow(SGP.Row,SGP); //SGP.Row übergibt die zurzeit markierte Spalte des StringGrids SGP Folgendes Problem:

Das Programmstartet, ich lade eine datei in das stringgrid und klicke auf einen spaltenkopf. das grid wird von dieser spalte ausgehend alphabetisch sortiert. jedoch bei einem zweiten klick (auf die gleiche oder eine andere spalte) tritt ein fehler auf:

"Im Projekt Projektwochenverwlatung.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00402296 in Modul 'Projektwochenveraltung.exe'. Schreiben von Adresse 30402969'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."

und nun zum zweiten problem. wenn ich eine zeile aus dem grid lösche, kommt folgenden fehlermeldung:

"Im Projekt Projektwochenverwlatung.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: 'TStringGridStrings kann nicht zu TStringGridString zugewiesen werden'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen."



Ich weiß nicht mehr weiter!

hat jemand eine idee, wie man das problem beheben kann?

Veieln Dank!


Gruß, dopeline
  Mit Zitat antworten Zitat
 


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 23:28 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 by Thomas Breitkreuz