登录
首页 >  Golang >  Go问答

通过传递缓冲区作为参数从 Go 调用 C++ 函数

来源:stackoverflow

时间:2024-02-19 15:24:26 122浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《通过传递缓冲区作为参数从 Go 调用 C++ 函数》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我们(出于所有意图和目的)有类似于以下 c++ 代码的内容。

calc.h

#pragma once

extern "c" {
    void docalc(uint8_t** buffer);
}

calc.cpp

#include 
#include "calc.h"

void doCalc(uint8_t** buffer) {
    uint8_t lb[256];

    for (int i = 0; i < 256; i++) {
        lb[i] = i;
    }

    *buffer = new uint8_t[256];

    std::memcpy(*buffer, lb, 256);
}

我们需要从 go 中调用这个方法,但不确定如何在 go 端构造缓冲区变量来传入(因为调用之前长度未知 - c++ 函数中的 256 应视为未知)。


正确答案


我制作了一个稍微不同的示例来适合您的用例:

package main

/*
#include 

void print_words(int count, char** words) {
    for (int i = 0; i < count; i += 1) {
        printf(words[i]);
    }
}
*/
import "C"
import "unsafe"

func main() {
    words := make([]*C.char, 2)

    words[0] = C.CString("Hello ")
    words[1] = C.CString("World\n")

    C.print_words((C.int)(len(words)), (**C.char)(unsafe.Pointer(&words[0])))
}

今天关于《通过传递缓冲区作为参数从 Go 调用 C++ 函数》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>