170 похожих чатов

Добрый вечер, гружу dylib через CGO. Собственно есть функция, которая

возвращает указатель на функцию из либы. Могу ли я как-то привести unsafe.Pointer на C функцию к func()? Я понимаю, что можно сделать обертку и вызывать эту функцию из C передавая указатель в качестве аргумента. Но хочется, чтобы можно было разное кол-во аргументов передавать в зависимости от подгруженной функции. А CGO не поддерживает variadic functions.

18 ответов

4 просмотра

Скорее всего, надо в C коде определить какую-то обертку, которая будет вызывать функцию по указателю

Sss.- Автор вопроса

Я же написал, что тогда я не смогу передавать разное кол-во аргументов при вызове, потому что variadic не поддерживается. Хотя вызов сишных функций из CGO по умолчанию чекает типы в сигнатуре..

Sss.
Я же написал, что тогда я не смогу передавать разн...

Тут можно выходить из положения только тем, что писать обертки для 1,2,3,4,...N параметров Потому что Cgo variadic никак не поддерживает

Sss.- Автор вопроса
Владимир Столяров
Тут можно выходить из положения только тем, что пи...

Обидно, либо передавать массив аргументов. Что ограничивает целевую функцию его принятием.

пишите на сишечке :)

Sss.- Автор вопроса
Константин
пишите на сишечке :)

Так я и пишу… Дайлибы мне как без сишечки подгружать то. Хочу просто для себя универсальный инструмент написать для таких мостов

В вашем компиляторе C и в go может даже call convention отличаться, конечно нельзя

Sss.- Автор вопроса
Sss.
Типо того

я не знаток, но ffi готовых нет?

Sss.- Автор вопроса
Константин
я не знаток, но ffi готовых нет?

Есть вроде бы только без CGO или с костылями

Sss.
Да это понятно

Тогда непонятно чего вы ожидаете

Sss.- Автор вопроса
Евгений Омельченко
Тогда непонятно чего вы ожидаете

Какого-нибудь магического способа чтобы все заработало, который я упускаю

Sss.
Какого-нибудь магического способа чтобы все зарабо...

Вы хотите гошные функции скармливать сишной функции, которая принимает указатель на функцию?

Евгений Омельченко
Вы хотите гошные функции скармливать сишной функци...

насколько я понял, наоборот, но в си функция может быть variadic.

Похожие вопросы

Обсуждают сегодня

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Всем здравствуйте!) У меня такой вопрос. Есть два роута, роут1 и роут2. Они связаны с очередью some_queue. По задаче предполагается, что есть два паблиша. Паблиш1 отправляет...
Format
10
Вопрос по WIN32: Насколько я понимаю то все функции win32 привязаны к объектам операционной системы. Например консоль, файл, кисть, окна итд. Следовательно функции win32 упра...
Tommy Vercetti
6
Hello, can I install macOS and run flutter on a virtual machine? Is it possible to print for iphone?
Mazones
11
кто-то пользуется компонентами rx ? как их лучше ставить, через OPM? (lazarus)
Iluha Companets
15
Дороу! У кого-нибудь есть в загашнике проверенная функция экранирования, аналог re.escape в Python? Из доки: » Escape all the characters in pattern except ASCII letters and n...
Daniil Smolyakov
9
подскажите пожалуйста, как мне освободить результат записанный в переменную result? в чем проблема подскажите если МОЖЕТЕ?
Михаил Helper
28
В смысле более затратная? Общая стоимость владения лошадью меньше, чем автомобиля. В среднем.
Sergej R
10
есть тут кто-то , кто только начал изучать си? если проходите курс на степике или как-то сами изучаете, пишите, может, скооперируемся?..
Eule
25
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта