AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ClientSocket in DLL ... Winsocket Error 10093
Thema durchsuchen
Ansicht
Themen-Optionen

ClientSocket in DLL ... Winsocket Error 10093

Ein Thema von Drag0n · begonnen am 15. Okt 2008 · letzter Beitrag vom 15. Okt 2008
Antwort Antwort
Drag0n

Registriert seit: 15. Okt 2008
4 Beiträge
 
#1

ClientSocket in DLL ... Winsocket Error 10093

  Alt 15. Okt 2008, 13:37

Hallo erstmal.
Bin neu hier

So und nun gleich zu meinem Problem....
Ich versuche eine DLL zu erstellen die einen Threat startet der einige Funktionen ausführen soll die auch schon ohne Probleme laufen
jedoch habe ich jetzt enen ClientSocket eingebaut. Alles funktioniert einwandfrei und ohne irgend welche Exceptions solange bis ich es in eine DLL packe, dann gibt er mir beim schliessen des Programms eine exception vom Typ Win-Socket-Error 10093 aber nur wenn ich vorher an den server Connecte

das Senden geht und empfangen auch halt nur das verlassen vom programm nicht es kommt mir so vor daß die finalization dann nicht ausführt aber da das dann in der dll steckt kann ich auch keinen debugger dran hängen oder zumindest weiß ich nicht wie

hier erstmal der Threat

Delphi-Quellcode:
unit Unit2;

interface

uses
  Classes,Windows,SysUtils,Graphics,Messages,
  Controls, StdCtrls,MSXML_TLB, comobj,ScktComp,IniFiles,ActiveX;

type
  TMyThreat = class(TThread)
  private
    FkKontrolle,FConnected : boolean;

    ClientSocket1: TClientSocket;
protected
    procedure Execute; override;

  public
    constructor Create;
    destructor Close;
    procedure Anhalten;
    procedure Fortsetzen;
    function Connect:boolean ;
    function SendReceive(SendString:string):string;
    {...}

  end;

var
  myt : TMyThreat;

implementation

const
  coding = 'utf-8';

constructor TMyThreat.Create;
begin
  inherited create(True);
  try
    CoInitialize(nil);
    FkKontrolle := true;
    fConnected := false;
    ClientSocket1 := TClientSocket.Create(nil) ;
  except end;
  resume;
end;

destructor TMyThreat.Close;
begin
  try
    CoUninitialize;
    ClientSocket1.Free;
    FkKontrolle := False;
    terminate;
    if suspended then resume;
    waitfor;
  except end;
end;

procedure TMyThreat.Anhalten;
begin
  if fkKontrolle and not suspended then
  begin
    suspend;
  end;
end;

procedure TMyThreat.Fortsetzen;
begin
  if suspended then
  begin
    resume;
  end;
end;

procedure TMyThreat.Execute;
begin
  try
    while not terminated do
    begin
      FkKontrolle := true;
      if not terminated then
      begin
        sleep(100);
        {....}
      end;
      FkKontrolle := False;
    end;
  except end;
end;

function TMyThreat.Connect:boolean ;
begin
  try
    with ClientSocket1 do
    begin
      active := false;
      ClientType := ctBlocking;
      Host:= '127.0.0.1';
      Port := 3580;
      active := true;
    end;
    result := true;
    FConnected := true;
  except
    on E: Exception do
    begin
      result:= false;
    end;
  end;
end;


function TMyThreat.SendReceive(SendString:string) : string;
var
    stream : TWinSocketStream;
begin
  try

    if Fconnected then
      with ClientSocket1 do
      begin
        Open;
        Socket.SendText(SendString+ #13#10 + #13#10);
        stream := TWinSocketStream.Create(Socket, 2000);
        if stream.WaitForData(1000) then
          result :=Socket.ReceiveText;
        stream.Free;
        CLose;
      end
    else
      result := 'No connection to server';
  except
    on E:Exception do
      result := 'Can not send string';
  end;
end;
initialization
if not Assigned(myt) then
  myt := TMyThreat.Create;

finalization
if Assigned(myt)then
  myt.Close;

end.

hab da schon mal alles rausgenommen bis nur noch das steht was den fehler Erzeugt

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, unit2,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    bSend: TButton;
    Panel1: TPanel;
    bConnect: TButton;
    procedure bSendClick(Sender: TObject);
    procedure bConnectClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.bSendClick(Sender: TObject);
var strTemp : string;
begin
  strTemp := myt.SendReceive(Edit1.Text);
  Panel1.Caption:= strTemp
end;

procedure TForm1.bConnectClick(Sender: TObject);
begin
  myt.Connect;
end;

end.

jetzt zur dll

Delphi-Quellcode:
library Project2;

uses
  SysUtils,Forms,
  Classes,Unit1;

var
  MyForm: TForm1;

{$R *.RES}

procedure OpenSetup;stdcall;
begin
  Application.CreateForm(TForm1, MyForm);
  MyForm.ShowModal;
end;

exports
  OpenSetup;
begin
end.

und zum schluss noch wie ich die dll dann verwende

Delphi-Quellcode:
unit Unit4;

interface
  procedure OpenSetup;

implementation
  procedure OpenSetup;
  external 'project2.dll'
end.

unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, unit4;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenSetup;
end;

end.

bin für jeden hinweis und tipp zum besser machen dankbar da ich mich erst seid kurzem mit delphi befasse.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ClientSocket in DLL ... Winsocket Error 10093

  Alt 15. Okt 2008, 14:07
Da der Constructor außerhalb des Threads ausgeführt wird und der Destructor innerhalb, dürftest du mit deinem coinitialize-counitialize-Paar Probleme haben. Pack die zwei mal um bzw. in die Execute-Methode!
Edit: Ähnliches gilt für den Socket und was du noch so hast.

Debuggen kannst du eine DLL, in dem du unter Start/Parameter die DLL mit einer Host-Anwednung verbindest.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Drag0n

Registriert seit: 15. Okt 2008
4 Beiträge
 
#3

Re: ClientSocket in DLL ... Winsocket Error 10093

  Alt 15. Okt 2008, 14:34

Danke!
hab auch gleich die coinitialize-counitialize umgepackt obwohl die eigentlich noch keine probs gemacht haben.

da nun das debuggen geht hab ich den fehler auch gleich gefunden nur versteh ich ihn nicht wirklich...

warum bringt er mir den Socket Fehler wenn ich die Connect funktion von der Unit1 mit einem ButtonClick ausführe aber wenn ich das Connect direkt in der SendRecieve Funktion ausführe nicht ?

Delphi-Quellcode:
{...}
try
  Connect;
  ifFConnected then {...}

wenn mir das jemand verständlich erklären kann bin ich wunschlos glücklich ... fürs erste
  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 14:07 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