Einzelnen Beitrag anzeigen

mensah

Registriert seit: 4. Jul 2005
Ort: Ilmenau
8 Beiträge
 
Delphi 7 Professional
 
#9

Re: C++ DLL in delphi einbinden

  Alt 4. Jul 2005, 15:02
hier das Code:
die Deklaration der Functionen:

Delphi-Quellcode:
.
.
.
function GetBlockValues(pValues: array of single):integer;{$IFDEF WIN32}stdcall;external 'DiggerClient.dll'; {$ENDIF}
function GetBlockValuesEx (pValues: array of single;numVec:integer):integer;{$IFDEF WIN32}stdcall;external 'DiggerClient.dll';{$ENDIF}
function GetNumAvailableDataVec:integer;{$IFDEF WIN32}stdcall;external 'DiggerClient.dll'; {$ENDIF}
function WaitForNumVec(numVecToWait:integer):integer;{$IFDEF WIN32}stdcall;external 'DiggerClient.dll';{$ENDIF}[pre]

// Messung starten
   Starttick:=GetTickCount;
   Startzeit:=Now;

   if MaxChannels=UseChannels then
      // alle Kanäle
      StatusBar1.SimpleText:='Startstatus: '+IntToStr(StartMessung)
   else
   begin
      // nur einige Kanäle
// SetLength(Kanaele,UseChannels);
      for i:=0 to UseChannels-1 do
         Kanaele[i]:=i;
      //test:=StartMessungEx(Kanaele, UseChannels);
      test:=StartMessung;

      //PKanaele:=@Kanaele;
      //test:=StartMessungEx(PKanaele, UseChannels);
      memo1.Text:=IntToStr(test);
   end;

// ButtonStopClick(Sender);
end;

procedure TForm1.ButtonStopClick(Sender: TObject);
var AnzahlDaten:Integer;
    Puffer:array of single;
    i,j,k,Fenster:Integer;
    stl:TStrings;
    Zeile:String;
    t:DWORD;
begin
   if not InitOK then
      Exit;

   Memo1.Text:=IntToStr(WaitForNumVec(10));

   // Messzeit anzeigen (Zeit zwischen Start und Stop Klicken; nur intern gemessen)
   LabeledEditMesszeit.Text:=IntToStr(GetTickCount-Starttick);
   // Messung stoppen
   StopMessung;

   // 1,5s warten um Verarbeitung in DLL zu ermöglichen (evtl. reduzieren)
   t:=GetTickCount;
   while (GetTickCount-t)<1500 do
      Application.ProcessMessages;
   // wieviele Daten wurden gesammelt?
   //AnzahlDaten:=GetNumAvailableDataVec;
   AnzahlDaten:=20000;
   // Puffergröße einstellen
   SetLength(Puffer,AnzahlDaten*UseChannels);
   AnzahlDaten:=GetBlockValuesEx(Puffer,AnzahlDaten);
   Memo1.Text:=IntToStr(AnzahlDaten);

   // Diagramm füllen
   for i:=0 to UseChannels-1 do
      for j:=0 to AnzahlDaten-1 do
      try
         Chart1.Series[i].AddY(Puffer[{j*UseChannels+i}i*AnzahlDaten+j]);
      except
         Memo1.Lines.Add(IntToStr(UseChannels)+';'+IntToStr(AnzahlDaten)+';'+IntToStr(i)+';'+IntToStr(j)+';'+FloatToStr(Puffer[{j*UseChannels+i}i*AnzahlDaten+j]));
      end;

   // Daten liegen in: Puffer[j*UseChannels+i]


   // Daten in Textdatei speichern
   stl:=TStringList.Create;

   // Infos für Textdatei
   stl.Add('Kanalanzahl: '+IntToStr(UseChannels));
   stl.Add('Abtastrate: '+IntToStr(Round(StrToFloat(ListBoxSampleraten.Items[ListBoxSampleraten.ItemIndex]))));
   if CheckBoxDC.Checked then
      stl.Add('DC-Adjust: ja')
   else
      stl.Add('DC-Adjust: nein');
   stl.Add('Messzeit: '+DateTimeToStr(Startzeit));
   stl.Add('Messdauer: '+LabeledEditMesszeit.Text+'ms');
   stl.Add('');
   stl.Add('Kanalimpedanzen');
   stl.AddStrings(ListBoxImpedanzen.Items);
   stl.Add('');

   // Datenüberschrift für TXT Datei
   Zeile:='';
   for i:=0 to UseChannels-1 do
      Zeile:=Zeile+'Kanal '+IntToStr(i+1)+';';
   stl.Add(Zeile);

   // Daten ausgeben
   for j:=0 to AnzahlDaten-1 do
   begin
      Zeile:='';
      for i:=0 to UseChannels-1 do
         Zeile:=Zeile+FloatToStr(Puffer[j*UseChannels+i])+';';
      stl.Add(Zeile);
   end;
   // Text speichern
   stl.SaveToFile(ExtractFilePath(Applicati
[edit=Luckie]Robert hat es dir doch noch extra gesagt, dass du Code-tags verwenden sollst! Mfg, Luckie[/edit]
vielan dank
  Mit Zitat antworten Zitat