Browse Source

+ Initial implementation

michael 25 years ago
parent
commit
984784374a
5 changed files with 100 additions and 0 deletions
  1. 15 0
      docs/progex/ctest.c
  2. 23 0
      docs/progex/ctest2.c
  3. 24 0
      docs/progex/plsubs.pp
  4. 14 0
      docs/progex/psubs.pp
  5. 24 0
      docs/progex/subs.pp

+ 15 - 0
docs/progex/ctest.c

@@ -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 - 0
docs/progex/ctest2.c

@@ -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 - 0
docs/progex/plsubs.pp

@@ -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 - 0
docs/progex/psubs.pp

@@ -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 - 0
docs/progex/subs.pp

@@ -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.