mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 15:29:14 +02:00
+ Initial implementation
This commit is contained in:
parent
59ba2f82cf
commit
984784374a
15
docs/progex/ctest.c
Normal file
15
docs/progex/ctest.c
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
extern char* SubStr(const char*, int, int);
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
int FromPos, ToPos;
|
||||||
|
|
||||||
|
s = strdup("Test");
|
||||||
|
FromPos = 2;
|
||||||
|
ToPos = 3;
|
||||||
|
printf("Result from SubStr: '%s'\n", SubStr(s, FromPos, ToPos));
|
||||||
|
return 0;
|
||||||
|
}
|
23
docs/progex/ctest2.c
Normal file
23
docs/progex/ctest2.c
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#include <dlfcn.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
void *lib;
|
||||||
|
char *s;
|
||||||
|
int FromPos, ToPos;
|
||||||
|
char* (*SubStr)(const char*, int*, int*);
|
||||||
|
printf("arh %d\n",RTLD_LAZY);
|
||||||
|
lib = dlopen("./libcaseudf.so", RTLD_LAZY);
|
||||||
|
printf("Result from dlopen (library handle): 0x%08x\n", lib);
|
||||||
|
SubStr = dlsym(lib, "SUBSTR");
|
||||||
|
printf("Address of SubStr = 0x%08x, last error code = %i\n",
|
||||||
|
SubStr, dlerror());
|
||||||
|
|
||||||
|
s = strdup("Test");
|
||||||
|
FromPos = 2;
|
||||||
|
ToPos = 3;
|
||||||
|
printf("Result from SubStr: '%s'\n", (*SubStr)(s, &FromPos, &ToPos));
|
||||||
|
dlclose(lib);
|
||||||
|
return 0;
|
||||||
|
}
|
24
docs/progex/plsubs.pp
Normal file
24
docs/progex/plsubs.pp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
program testsubs;
|
||||||
|
|
||||||
|
Type
|
||||||
|
TSubStrFunc = function (const CString: PChar; FromPos, ToPos: longint): PChar; cdecl;
|
||||||
|
|
||||||
|
Function dlopen(name : pchar; mode : longint) : pointer; cdecl; external 'dl';
|
||||||
|
Function dlsym(lib : pointer; name : pchar) : pointer; cdecl;external 'dl';
|
||||||
|
Function dlclose(lib : pointer) : longint; cdecl; external 'dl';
|
||||||
|
|
||||||
|
var
|
||||||
|
s: PChar;
|
||||||
|
FromPos, ToPos: Integer;
|
||||||
|
lib : pointer;
|
||||||
|
SubStr : TSubStrFunc;
|
||||||
|
|
||||||
|
begin
|
||||||
|
s := 'Test';
|
||||||
|
FromPos := 2;
|
||||||
|
ToPos := 3;
|
||||||
|
lib:=dlopen('libsubs.so',1);
|
||||||
|
Pointer(Substr):=dlsym(lib,'SubStr');
|
||||||
|
WriteLn(SubStr(s, FromPos, ToPos));
|
||||||
|
dlclose(lib);
|
||||||
|
end.
|
14
docs/progex/psubs.pp
Normal file
14
docs/progex/psubs.pp
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
program testsubs;
|
||||||
|
|
||||||
|
function SubStr(const CString: PChar; FromPos, ToPos: longint): PChar;
|
||||||
|
cdecl; external 'subs';
|
||||||
|
|
||||||
|
var
|
||||||
|
s: PChar;
|
||||||
|
FromPos, ToPos: Integer;
|
||||||
|
begin
|
||||||
|
s := 'Test';
|
||||||
|
FromPos := 2;
|
||||||
|
ToPos := 3;
|
||||||
|
WriteLn(SubStr(s, FromPos, ToPos));
|
||||||
|
end.
|
24
docs/progex/subs.pp
Normal file
24
docs/progex/subs.pp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
Example library
|
||||||
|
}
|
||||||
|
library subs;
|
||||||
|
|
||||||
|
function SubStr(CString: PChar; FromPos, ToPos: Longint): PChar; cdecl; export;
|
||||||
|
var
|
||||||
|
Length: Integer;
|
||||||
|
begin
|
||||||
|
Length := StrLen(CString);
|
||||||
|
SubStr := CString + Length;
|
||||||
|
if (FromPos > 0) and (ToPos >= FromPos) then
|
||||||
|
begin
|
||||||
|
if Length >= FromPos then
|
||||||
|
SubStr := CString + FromPos - 1;
|
||||||
|
if Length > ToPos then
|
||||||
|
CString[ToPos] := #0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
exports
|
||||||
|
SubStr;
|
||||||
|
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user