文档章节

windows下go调自己写的c动态库(dll)

徐学良
 徐学良
发布于 2015/12/30 19:40
字数 236
阅读 1395
收藏 6

首先编写c文件testdll.c

#include <stdio.h>
int myadd(int a, int b)
{
    return a + b;
}

编译成动态库

gcc -shared testdll.c -o add.dll  得到 add.dll文件

下面就是引用:

package main

import (

    "fmt"

    "syscall"

)

func main() {

    addfile, err := syscall.LoadLibrary("../add.dll") //动态库的路径

    if err != nil {

        fmt.Printf("cgo:err :%v\n", err)

    }

    myaddcall, _ := syscall.GetProcAddress(addfile, "myadd")

    var nargs uintptr = 3

    ret, _, callErr := syscall.Syscall(uintptr(myaddcall), nargs, 5, 3, 0)

    if callErr != 0 {

        fmt.Printf("Call myaddcall: %v\n", callErr)

    }

    fmt.Printf("myadd:%v\n", ret)

}

然后直接go run运行即可


非常感谢知乎和周贤,是他们帮我解决的这个问题,下面是问题链接,有兴趣的可以看下

https://www.zhihu.com/question/39015381

© 著作权归作者所有

共有 人打赏支持
徐学良
粉丝 23
博文 213
码字总数 13841
作品 0
浦东
程序员
私信 提问
加载中

评论(1)

红烧土豆
红烧土豆
42
win64怎么配置glua环境?

想在windows下用go调lua脚本,开发工具用的liteide,在windows下已经安装了lua5.1.4和go,初步打算使用github上大神们封装的glua库(aarzilli/golua · GitHub),那么问题来了,在linux下这个...

徐学良
2016/01/04
289
2
基于Visual C++6.0的DLL编程实现

基于Visual C++6.0的DLL编程实现 一、前言 自从微软推出16位的Windows操作系统起,此后每种版本的Windows操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上 Windows操作系统中几乎...

晨曦之光
2012/03/09
0
0
关于JNI写的DLL调用实际业务DLL的问题

标红圈的2个文件 是我根据 ClassWizard 加载的功能DLL 生成的 然后在我的DLL的这个CPP里面include进来 我想知道我的这个DLL在实际调的时候 是不是会去加载system32下的 动态库.因为我没有实际...

Chaos_heart
2013/01/22
146
2
深入分析Windows和Linux动态库应用异同

摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 ...

长平狐
2013/01/06
69
0
深入分析Windows和Linux动态库应用异同

摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 ...

晨曦之光
2012/03/02
56
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring应用学习——AOP

1. AOP 1. AOP:即面向切面编程,采用横向抽取机制,取代了传统的继承体系的重复代码问题,如下图所示,性能监控、日志记录等代码围绕业务逻辑代码,而这部分代码是一个高度重复的代码,也就...

江左煤郎
今天
4
0
eclipse的版本

Eclipse各版本代号一览表 Eclipse的设计思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。 Eclipse基本内核包括:图形API(SWT/Jface),Java开发环...

mdoo
今天
3
0
SpringBoot源码:启动过程分析(一)

本文主要分析 SpringBoot 的启动过程。 SpringBoot的版本为:2.1.0 release,最新版本。 一.时序图 还是老套路,先把分析过程的时序图摆出来:时序图-SpringBoot2.10启动分析 二.源码分析 首...

Jacktanger
今天
4
0
小白带你认识netty(二)之netty服务端启动(上)

上一章 中的标准netty启动代码中,ServerBootstrap到底是如何启动的呢?这一章我们来瞅下。 server.group(bossGroup, workGroup);server.channel(NioServerSocketChannel.class).optio...

天空小小
今天
3
0
聊聊storm trident batch的分流与聚合

序 本文主要研究一下storm trident batch的分流与聚合 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout) .p......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部