Golang for external dynamic libraries - has anyone used this ?

  1. 3 years ago

    Neil M

    17 Sep 2016 Pre-Release Testers, Xojo Pro

    Has anyone compiled external dynamic libraries (dll, so / dylib) built from golang and used them via declare statements inside a Xojo program on Windows, Mac and Linux GUI / cross platform Console programs ?

    I've previously only done this in C but golang appears to have some very nice looking libraries which makes the language attractive for backend library type work.

    Specifically the encryption libraries available to golang appear to be pretty good.

    Now I know golang works differently to lets say a traditionally compiled library written and compiled with gcc in that it has built in garbage collection and whatever else golang comes with so I wonder if this is an issue or not ?

    I suspect it won't be a problem so I'm going to be running some basic tests on this anyway but I'd like to hear of anyone elses experiences with golang usage with Xojo.

  2. Norman P

    17 Sep 2016 Xojo Inc, Pre-Release Testers, Xojo Pro Seeking work. npalardy@great-w...

    See https://github.com/golang/go/issues/11058
    Esp towards the end of the thread in 2016 (recent comments are < 23 hours old)

  3. Neil M

    17 Sep 2016 Pre-Release Testers, Xojo Pro

    Thanks, I'm sure this will be helpful (took a quick look already). I need only a single DLL. Will read up on this next week.

    Golang seems to be an unstoppable force lately and it's getting better all the time by the looks of it.

    If the powers that be at Google decided to make a cross platform Golang GUI visual IDE then I have a feeling that it could almost be game over for a lot of existing systems but I doubt that will ever happen.

  4. 2 years ago

    Neil M

    17 Feb 2018 Pre-Release Testers, Xojo Pro
    Edited 2 years ago

    Golang 1.10 was released today or yesterday so I thought I would revisit this topic.

    I was able to get a simple function written in Golang built as a Windows DLL and successfully call it from within a Xojo console app having declared it as a function.

    Creating the dll using go does require gcc to be installed on the windows dev system.

    This was a rough and ready simple first test that outputs a line of text, I will run additional tests in the future as I now look at golang to supplement my programs.

    This opens up a whole new world of 'back end' functionality with Xojo as a front end.

    Simple proof of concept :

    64 bit Windows console app run event :

    dim retval as integer
    soft Declare function HelloWorld Lib "O:\go\dlltest\hello.dll" () as integer
    print "After declare"
    retval = HelloWorld()
    print "After function call to go dll...."

    hello.go

    package main
    
    import "fmt"
    import "C"
    
    func main(){}
    //export HelloWorld
    func HelloWorld() int {
    fmt.Println("This is output of the function in the golang created dll")
    return 0
    }

    golang build command

    go build -buildmode=c-shared -o hello.dll hello.go

    Program output :

    O:\xojo\dllgolang\Builds - golangdll.xojo_project\Windows 64 bit\golangdll>golangdll
    After declare
    This is output of the function in the golang created dll
    After function call to go dll....
    
    
    O:\xojo\dllgolang\Builds - golangdll.xojo_project\Windows 64 bit\golangdll>

    At this most basic level it appears to work just fine, I will be exploring additional options in the future.

    I guess things to look out for are which variable types match up, etc. Also - I've read that you should never 'unload' a golang dll.

    I've already gone '64 bit only' now which means that I really could do with that 64 bit windows debugger, any word on when we can expect that to be available ?

  5. 7 weeks ago

    dave d

    Jan 7 Pre-Release Testers, Xojo Pro Australia

    Anyone tried to do a similar thing with OSX?, I mean make a call to GO from xojo without using a shell?

  6. Seems to all work fine on OSX ...

    https://storage.googleapis.com/charlierobin-1245.appspot.com/downloads/dylibs_with_go_osx.zip

    (Only very quickly knocked together and tested with what I've got here: 2019r3 on Catalina, with the latest OSX go build: go1.13.5.darwin-amd64)

    Charlie

  7. dave d

    Jan 8 Pre-Release Testers, Xojo Pro Australia

    Thanks Charlie, will take a look.
    Dave

or Sign Up to reply!