Announcement

Collapse
No announcement yet.

Verständnis Frage Dll Funk. aufruf und Speicher Manager

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständnis Frage Dll Funk. aufruf und Speicher Manager

    Hallo,<br>
    <br><pre>
    die dll

    type
    PhlTCPClient = ^ThlTCPClient;
    ThlTCPClient = class(TIdTCPClient)
    private
    FThreadId : Cardinal;
    public
    property ThreadId: Cardinal read FThreadID write FThreadID;
    end;

    TTaskList = array[0..MaxListSize - 1] of ThlTCPClient;
    <br>
    function CreateClient:Pointer; stdcall;
    var i,ir: Integer;
    begin
    Result := nil;
    Lock;
    try
    ir := -1;
    for i := 0 to TaskCount-1 do begin
    if TaskList[i].ThreadId = GetCurrentThreadId then begin
    ir := i;
    break;
    end;
    end;
    if ir = -1 then begin
    Result := @TaskList[TaskCount];
    Inc(TaskCount);
    ThlTCPClient(Result^) := ThlTCPClient.Create(nil);
    ThlTCPClient(Result^).ThreadId := GetCurrentThreadId;
    end;
    finally
    UnLock;
    end;
    end;

    function Connect(const pcHost: PChar;const Port:Integer;const TimeOut:Integer = -1):Boolean; stdcall;
    var i: Integer;
    p: PhlTCPClient;
    begin
    Result := False;
    Lock;
    try;
    p := nil;
    for i := 0 to TaskCount-1 do begin
    if TaskList[i].ThreadId = GetCurrentThreadId then begin
    p := @TaskList[i];
    break;
    end;
    end;
    finally
    Unlock;
    end;
    if p <> nil then begin
    ThlTCPClient(p^).hlHost := pcHost;
    ThlTCPClient(p^).Port := Port;
    ThlTCPClient(p^).Connect(TimeOut);
    Result := ThlTCPClient(p^).Connected;
    end;
    end;

    function ConnectEx(const p:Pointer;const pcHost: PChar;const Port:Integer;const TimeOut:Integer = -1):Boolean; stdcall;
    begin
    Result := False;
    if p <> nil then begin
    ThlTCPClient(p^).hlHost := pcHost;
    ThlTCPClient(p^).Port := Port;
    ThlTCPClient(p^).Connect(TimeOut);
    Result := ThlTCPClient(p^).Connected;
    end;
    end;

    ...

    </pre>

    zu Ziel: eine Dll auf die mehre Threads zugreifen ohne sich gegenseitig zu stören(auf anderen warten), sprich auser Create zu beispiel gleichzeitig Daten senden.
    Und deshalb eine Dll das sich Indy oft ändert.
    Ich möchte nur die DLL tauschen.
    <br>
    <br>
    das Problem: wenn ich die DLL ohne "ShareMem" mache kommt es zu mekrwürdigen fehler Meldungen.<br>
    <br>
    M.f.G. H. Leesch

  • #2
    Hallo,<br>
    <br>
    noch keine Antwort :-(<br>
    Ist das Thema zu einfach und ich zu doof,<br>
    oder zu komplex um es in Delphi umzusetzen??<br>
    <br>
    (es würde mir auch ein Link zu Beispielen oder
    ähnlichen Thema helfen...)<br>
    <br>
    H. Leesc

    Comment


    • #3
      Hmmm, diese Frage ist sehr schwer zu beantworten. So viel wie ich von Indy kenne kann ich nur sagen das Indy das nicht so einfach unterstützen wird. Dazu ist Indy vom Konzept her viel zu kompliziert und zu eng mit dem Messaging des Prozesses verknüpft. Es nutzt halt viele High Level Features wie LongString, Synchronized Callbacks usw.

      Normalerweise sollte es keine Probleme geben wenn man auf neue Versionen updatet, aber im Falle von Indy zeigt sich da die Qualität der Bibliothek.

      Gruß Hage

      Comment

      Working...
      X