Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2010-01

GetProcAddress

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Roland Turcan

Hello Lazarus mailing list!

I have written a very simple library which contains only two exports. It is intended to be a bridge between an old application and clipboard on linux to exchange data.

---------------------------------------------------
library clipbrdgtk;
{$MODE Delphi}
uses
  Classes, Interfaces, Clipbrd;
function clipboard_getastext:PChar; cdecl; export;
begin
  result := PChar (Clipboard.AsText);
end;
PROCEDURE clipboard_setastext (iStr:PChar); cdecl; export;
begin
  Clipboard.AsText := String (iStr);
end;

exports
clipboard_getastext,

  clipboard_setastext;

begin

  //

end.
------------------------------------------------------------- when I later try to load it for testing in Lazarus test application I cannot find the exports:

-------------------------------------------------------------
TYPE TClipboard_GetAsText = FUNCTION:PChar; CDECL;
TYPE TClipboard_SetAsText = PROCEDURE (iStr:PChar); CDECL;
TYPE TClipbrd =CLASS
                      PRIVATE
                        FHandle:HMODULE;
                        FGetAsText:TClipboard_GetAsText;
                        FSetAsText:TClipboard_SetAsText;
                        FUNCTION GetAsText: STRING;
                        PROCEDURE SetAsText(CONST Value: STRING);
                      PUBLIC
                        CONSTRUCTOR Create;
                        DESTRUCTOR Destroy; OVERRIDE;
                        PROPERTY AsText:STRING READ GetAsText WRITE SetAsText;
                      END;
IMPLEMENTATION
USES Classes, SysUtils, Forms, dynlibs;

{ TClipbrd }

CONSTRUCTOR TClipbrd.Create;
var s :string;
BEGIN
  FHandle := 0;
  s := ExtractFilePath (Application.ExeName) + 'clipbrdgtk.so';
  IF FileExists (s) then begin
    FHandle := LoadLibrary (PChar (s));
  END;
  FGetAsText := NIL;
  FSetAsText := NIL;
  IF FHandle  0 THEN begin
    FGetAsText := GetProcAddress (FHandle, PChar ('clipboard_getastext'));
    FSetAsText := GetProcAddress (FHandle, PChar ('clipboard_setastext'));
  END;
END;
DESTRUCTOR TClipbrd.Destroy;
BEGIN
  IF FHandle  0 THEN begin
    FreeLibrary (FHandle);
  END;
  INHERITED;
END;
FUNCTION TClipbrd.GetAsText: STRING;
BEGIN
  IF Assigned (FGetAsText) THEN begin
    RESULT := FGetAsText;
  END;
END;
PROCEDURE TClipbrd.SetAsText(const Value: STRING);
BEGIN
  IF Assigned (FSetAsText) THEN begin
    FSetAsText (PChar (Value));
  END;
END;
---------------------------------------------------------------
What could be wrong, that it doesn't find the exports and FGetAsText
and FSetAsText stay NIL;

Thanks.

Reply by email