AGB  ·  Datenschutz  ·  Impressum  







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

immer noch Stress mit DLL Aufruf

Ein Thema von alf.stefan · begonnen am 12. Jan 2005 · letzter Beitrag vom 13. Jan 2005
 
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#1

immer noch Stress mit DLL Aufruf

  Alt 12. Jan 2005, 10:50
Das Problem von mir im vorigen Thread
Zitat:
habe DLL aber nur C++ und VB Beispiele
ist behoben ich bin aber immer noch nicht glücklich.

Wenn ich auf die von der DLL Funktion zurückgelieferten Werte zugreife bekomme ich eine ACCESS VIOLATION
und dann geht gar nix mehr.
Das heißt es funktioniert alles wunderbar und die erwünschten Strings werden von der Funktion zurückgeliefert und
im Memo1 Appended, aber nach verlassen der event routine und erst dann kommt die Access violation- siehe code

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  lLoop,c : word;
  err, getNum : KMErrorCode;
  NumDevices : Word;
  erg : string;
  nBuff,ipBuff,SerStrBuff : array of Pchar;
  DipArrayBuff : Array of PUint16;

  name : Array[0..MAX_TCP_NM_LENGTH] of pChar;
  ip: Array[0..MAX_TCP_IP_LENGTH] of pChar;
  ser: Array[0..MAX_TCP_SN_LENGTH] of pChar;
  sName, sIp, sSerial : String;
begin
   err := KMInitialize;
   Memo1.Lines.Append('Wait....');

   NumDevices :=0;
   KMTCPRefreshDevices();
   getNum := KMTCPGetNumDevices(NumDevices);

   SetLength(nBuff, NumDevices);
   SetLength(ipBuff, NumDevices);
   SetLength(serStrBuff, NumDevices);
   SetLength(DipArrayBuff, NumDevices);

   for lLoop := 0 to NumDevices-1 do
   begin
      for c:= 0 to MAX_TCP_NM_LENGTH do name[c] := new(pChar);
      nBuff[lLoop] := name[0];
      for c:= 0 to MAX_TCP_IP_LENGTH do ip[c] := new(pChar);
      ipBuff[lLoop] := ip[0];
      for c:= 0 to MAX_TCP_SN_LENGTH do ser[c] := new(pChar);
      serStrBuff[lLoop] := ser[0];
      DipArrayBuff[lLoop] := new(PUint16);
   end;

   if getNum = 0 then
   begin
      err := KMTCPGetDeviceInformation(@nBuff[0], @ipBuff[0], @serStrBuff[0], DipArrayBuff[0], NumDevices);
   end;
   if err = 0 then
   begin
      memo1.Lines.Append(' Controllers Found '+IntToStr(NumDevices));
      for c:= 0 to NumDevices-1 do
      begin
        Memo1.Lines.Append('Name        : '+nBuff[c]);
        Memo1.Lines.Append('Ip-Addr     : '+ipBuff[c]);
        Memo1.Lines.Append('Serial      : '+serStrBuff[c]);
        Memo1.Lines.Append('Dip Settings : '+IntToStr(DipArrayBuff[c]^));
        Memo1.Lines.Append(StringOfChar('-', 60));
      end;
   end;
   Memo1.Lines.Append('finished');
end;
wenn ich folgende Zeile weglasse oder auskommentiere funtioniert alles aufs Beste
Code:
.......
      ........
      memo1.Lines.Append(' Controllers Found '+IntToStr(NumDevices));
      for c:= 0 to NumDevices-1 do
      begin
        Memo1.Lines.Append('Name        : '+nBuff[c]);
        Memo1.Lines.Append('Ip-Addr     : '+ipBuff[c]);
        Memo1.Lines.Append('Serial      : '+serStrBuff[c]);
        Memo1.Lines.Append('Dip Settings : '+IntToStr(DipArrayBuff[c]^));
        Memo1.Lines.Append(StringOfChar('-', 60));
      end;
   end;
   ........
   ........
was ist da los?? Muß ich die ganzen Pointer die ich hier generiert habe aufräumen oder löschen?
Hat da jemand eine Idee?

Ratloser Gruß

Stefan
  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 15:15 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