У меня есть библиотека C, которая принимает непрозрачные указатели в заголовке.Вызов функции extern C, вызванной с void *
Вот мой C заголовок
typedef void* dbaxRange_p;
typedef void* dbaxFunction_p;
extern "C" {
// ... lots of other methods...
EXPORT dbaxRange_p range_d(const double value);
EXPORT void add_param(dbaxFunction_p func, dbaxRange_p arg);
EXPORT dbaxFunction_p dbax_function(const char* name, const int num_params);
// Call method taking void*
EXPORT dbaxRange_p call(dbaxFunction_p func);
}
Вот мой D интерфейс CDbax.d:
extern (C):
alias void *dbaxFunction_p;
alias void *dbaxRange_p;
extern (C) {
dbaxRange_p range_d(double value);
void add_param(dbaxFunction_p func, dbaxRange_p arg);
dbaxFunction_p dbax_function(const char *name, int num_params);
dbaxRange_p call(dbaxFunction_p func);
}
И вот мой вызов функции
class Dbax {
// ...
dbaxFunction_p func_;
this(string name) {
func_ = dbax_function(std.string.toStringz(name),0);
}
Dbax add(double val) {
auto rng = range_d(val);
add_param(func_,rng);
return this;
}
dbaxRange_p call() {
return call(cast(dbaxFunction_p) this.func_);
}
}
main.d
import CDbax;
void test()
{
auto res = new CDbax.Dbax("GetVersionNumber").add(0.24).call();
}
Но я получаю эту ошибку: -
CDbax.d(113): Error: function CDbax.Dbax.call() is not callable using argument types (void*)
Update Ответ в том, что есть пространство имен столкновение. Он взял вызов C FFI, а не функцию вызова класса Dbax. Я задам следующий вопрос о том, почему