Family Day update
This commit is contained in:
parent
aac6731f2c
commit
9ad63ea473
2442 changed files with 39761 additions and 8255 deletions
|
|
@ -0,0 +1,8 @@
|
|||
#include <stdio.h>
|
||||
/* gcc -shared -fPIC -nostartfiles fakeimglib.c -o fakeimglib.so */
|
||||
int openimage(const char *s)
|
||||
{
|
||||
static int handle = 100;
|
||||
fprintf(stderr, "opening %s\n", s);
|
||||
return handle++;
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package main
|
||||
|
||||
/*
|
||||
#cgo LDFLAGS: -ldl
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <dlfcn.h>
|
||||
|
||||
typedef int (*someFunc) (const char *s);
|
||||
|
||||
int bridge_someFunc(someFunc f, const char *s) {
|
||||
return f(s);
|
||||
}
|
||||
*/
|
||||
import "C"
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
var handle = -1
|
||||
|
||||
func myOpenImage(s string) int {
|
||||
fmt.Fprintf(os.Stderr, "internal openImage opens %s...\n", s)
|
||||
handle++
|
||||
return handle
|
||||
}
|
||||
|
||||
func main() {
|
||||
libpath := C.CString("./fakeimglib.so")
|
||||
defer C.free(unsafe.Pointer(libpath))
|
||||
imglib := C.dlopen(libpath, C.RTLD_LAZY)
|
||||
var imghandle int
|
||||
if imglib != nil {
|
||||
openimage := C.CString("openimage")
|
||||
defer C.free(unsafe.Pointer(openimage))
|
||||
fp := C.dlsym(imglib, openimage)
|
||||
if fp != nil {
|
||||
fi := C.CString("fake.img")
|
||||
defer C.free(unsafe.Pointer(fi))
|
||||
imghandle = int(C.bridge_someFunc(C.someFunc(fp), fi))
|
||||
|
||||
} else {
|
||||
imghandle = myOpenImage("fake.img")
|
||||
}
|
||||
C.dlclose(imglib)
|
||||
} else {
|
||||
imghandle = myOpenImage("fake.img")
|
||||
}
|
||||
fmt.Printf("opened with handle %d\n", imghandle)
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
use Inline
|
||||
C => "DATA",
|
||||
ENABLE => "AUTOWRAP",
|
||||
LIBS => "-lm";
|
||||
|
||||
print 4*atan(1) . "\n";
|
||||
|
||||
__DATA__
|
||||
__C__
|
||||
double atan(double x);
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
use FFI::Platypus;
|
||||
my $ffi = FFI::Platypus->new;
|
||||
$ffi->lib(undef);
|
||||
$ffi->attach(puts => ['string'] => 'int');
|
||||
$ffi->attach(atan => ['double'] => 'double');
|
||||
|
||||
puts(4*atan(1));
|
||||
Loading…
Add table
Add a link
Reference in a new issue