欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang 編譯成DLL文件的操作

 更新時(shí)間:2021年05月06日 10:04:10   作者:冷月醉雪  
這篇文章主要介紹了Golang 編譯成DLL文件的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

首先撰寫(xiě)golang程序exportgo.go:

package main
import "C"
import "fmt"
 
//export PrintBye
 
func PrintBye() {
    fmt.Println("From DLL: Bye!")
}
//export Sum
 
func Sum(a int, b int) int {    
return a + b;
}
func main() {    
// Need a main function to make CGO compile package as C shared library
}
   

編譯成 DLL 文件:

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

編譯后得到 exportgo.dll 和 exportgo.h兩個(gè)文件。

補(bǔ)充:Go1.10在編譯成dll小實(shí)例

看代碼吧~

package main
import (
    "net"
)
//必須導(dǎo)入
import "C"
//編譯成動(dòng)態(tài)庫(kù)也是必須的
func main() {}
//export Interfaces
func Interfaces(list []string, retlen *int) string {
    interf, err := net.InterfaceAddrs()
    if err != nil {
        return err.Error()
    }
    for i, v := range interf {
        if i >= len(list) {
            break
        }
        list[i] = v.String()
    }
    *retlen = len(list)
    return ""
}

編譯命令:

go build -ldflags "-s -w" -buildmode=c-shared -o net.dll main.go

在當(dāng)前文件夾會(huì)生成兩個(gè)文件net.dll net.h

下面是使用:

#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include "net.h"
int main()
{ 
    GoString ret;
    GoSlice slice;
    slice.len=10;
    slice.cap=0;
    slice.data=calloc(10,sizeof(GoString));
    GoInt retlen=0;
    ret=Interfaces(slice,&retlen);
    if (ret.n != 0)
    {
        char* retc = calloc(ret.n+1,sizeof(char));
        memcpy(retc,ret.p,ret.n);
        printf("Return value:%s\n", retc); 
        free(retc);
        retc=NULL;
    }
    GoString* st=(GoString*)(slice.data);
    for (int i=0;i<retlen;i++)
    {
        printf("%s\n", st[i].p);
    }
    free(slice.data);
    slice.data=NULL;
    return 0;
}

盡量不要用返回值來(lái)在C中處理,因?yàn)镚o code不能在C分配的內(nèi)存中存儲(chǔ)指向Go分配的內(nèi)存的指針,這個(gè)很重要,不然你就會(huì)在使用過(guò)程中各種崩潰。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Golang Recover處理錯(cuò)誤原理解析

    Golang Recover處理錯(cuò)誤原理解析

    Golang 中的?recover?是一個(gè)鮮為人知但非常有趣和強(qiáng)大的功能,讓我們看看它是如何工作的,以及在 Outreach.io 中如何利用它來(lái)處理 Kubernetes 中的錯(cuò)誤
    2023-12-12
  • Go語(yǔ)言中?Print?Printf和Println?的區(qū)別解析

    Go語(yǔ)言中?Print?Printf和Println?的區(qū)別解析

    這篇文章主要介紹了Go語(yǔ)言中?Print?Printf和Println?的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • golang為什么要統(tǒng)一錯(cuò)誤處理

    golang為什么要統(tǒng)一錯(cuò)誤處理

    這篇文章主要介紹了golang為什么要統(tǒng)一錯(cuò)誤處理,統(tǒng)一錯(cuò)誤處理的目的是為了前端開(kāi)發(fā)接收到后端的statuscode,之后便于前端邏輯上開(kāi)發(fā)以及開(kāi)發(fā),下文具體操作過(guò)程需要的小伙伴可以參考一下
    2022-04-04
  • Go語(yǔ)言原子操作atomic的使用

    Go語(yǔ)言原子操作atomic的使用

    本文介紹了Go語(yǔ)言原子操作的使用方法,原子操作是一種無(wú)鎖的技術(shù),可通過(guò)CPU指令實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • 使用Go語(yǔ)言實(shí)現(xiàn)谷歌翻譯功能

    使用Go語(yǔ)言實(shí)現(xiàn)谷歌翻譯功能

    這篇文章主要為大家詳細(xì)介紹了如何使用Go語(yǔ)言實(shí)現(xiàn)谷歌翻譯功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-02-02
  • Go中的動(dòng)態(tài)速率限制有效控制流量

    Go中的動(dòng)態(tài)速率限制有效控制流量

    這篇文章主要為大家介紹了Go中的動(dòng)態(tài)速率限制有效控制流量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Golang如何快速刪除map所有元素

    Golang如何快速刪除map所有元素

    這篇文章主要介紹了Golang如何快速刪除map所有元素問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Golang中指針的使用詳解

    Golang中指針的使用詳解

    Golang是一門(mén)支持指針的編程語(yǔ)言,指針是一種特殊的變量,存儲(chǔ)了其他變量的地址。通過(guò)指針,可以在程序中直接訪(fǎng)問(wèn)和修改變量的值,避免了不必要的內(nèi)存拷貝和傳遞。Golang中的指針具有高效、安全的特點(diǎn),在并發(fā)編程和底層系統(tǒng)開(kāi)發(fā)中得到廣泛應(yīng)用
    2023-04-04
  • Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析

    Go 標(biāo)準(zhǔn)庫(kù)增加metrics指標(biāo)探討分析

    go中有一個(gè)神奇的標(biāo)準(zhǔn)庫(kù) runtime/metrics,提供了一系列預(yù)定義好的 Go 自身的相關(guān)指標(biāo),如果沒(méi)有編寫(xiě)過(guò)基礎(chǔ)監(jiān)控庫(kù)或者關(guān)注的比較少的朋友可能會(huì)沒(méi)接觸到這類(lèi)指標(biāo),本文展開(kāi)現(xiàn)有metrics 指標(biāo),并結(jié)合現(xiàn)有的社區(qū)討論一起看看還有沒(méi)有必要增加更多的標(biāo)準(zhǔn)庫(kù)指標(biāo)
    2023-10-10
  • 深入理解golang chan的使用

    深入理解golang chan的使用

    本文主要介紹了golang chan的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評(píng)論