in my go file:
package main

import "C"

// AddListener ...
//export AddListener
type AddListener interface {
addResult(i int)
}

func main() {

}

// Add ...
//export Add
func Add(i, j int) int {
return i + j
}

// Add2 ...
//export Add2
func Add2(i, j int, listener AddListener) {
listener.addResult(i + j)
}


and build:
go build -o ../test/iamfan -buildmode=c-shared ./main.go

two files are generated. iamfan and iamfan.h
/* Code generated by cmd/cgo; DO NOT EDIT. */

/* package command-line-arguments */


#line 1 "cgo-builtin-export-prolog"

#include <stddef.h> /* for ptrdiff_t below */

#ifndef GO_CGO_EXPORT_PROLOGUE_H
#define GO_CGO_EXPORT_PROLOGUE_H

#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef struct { const char *p; ptrdiff_t n; } _GoString_;
#endif

#endif

/* Start of preamble from import "C" comments.  */




/* End of preamble from import "C" comments.  */


/* Start of boilerplate cgo prologue.  */
#line 1 "cgo-gcc-export-header-prolog"

#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_H

typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef __SIZE_TYPE__ GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;

/*
 static assertion to make sure the file is being used on architecture
 at least with matching size of GoInt.
*/
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 
1:-1];

#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef _GoString_ GoString;
#endif
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;

#endif

/* End of boilerplate cgo prologue.  */

#ifdef __cplusplus
extern "C" {
#endif


// Add ...

extern GoInt Add(GoInt p0, GoInt p1);

// Add2 ...

extern void Add2(GoInt p0, GoInt p1, GoInterface p2);

#ifdef __cplusplus
}
#endif


in my c file:
#include <stdio.h>
#include "iamfan.h"

void result(int i)
{
printf("result from go: %i\n", i);
}

int main()
{
GoInt addResult;
addResult = Add(5, 8);
printf("add result: %lli\n", addResult);

GoInterface face;
// ???
// please help me.
Add2(2, 6, face);
return 0;
}

How to use add2 function, i am very troubled.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/3f425f36-8610-4954-946a-72c8aac63d05%40googlegroups.com.

Reply via email to