Я подготовил минимальный воспроизводимый пример.ошибка обратного вызова dyncall при переключении с 64 до 32 бит
Когда я скомпилирован с 64-битным потоком и ссылаюсь на 64-битные версии библиотек dyncall, тогда напечатанный результат - ожидаемый 2.5000
.
Переключение как на 32 бит, так и после make clean
Получать распечатанный результат 0.0000
.
Проблема заключается только в dyn-callbacks, dyncalls, похоже, работают нормально.
#include <stdio.h>
#include <assert.h>
#include <dynload/dynload.h>
#include <dyncall/dyncall.h>
#include <dyncallback/dyncall_callback.h>
char mul_cbHandler (DCCallback *cb,
DCArgs *args, //DCArgs
DCValue *result,
void *userdata) {
double a = dcbArgDouble(args);
double b = dcbArgDouble(args);
printf("got args: %f %f\n", a, b);
result->d = a*b; // d: double
return 'f'; // i or f
}
typedef double (*fptr_d_dd)(double x, double y);
void callbReceiver(fptr_d_dd fptr) {
printf("res: %f\n", fptr(5.0f, 0.5f));
}
void testCallback() {
DCCallVM* vm = dcNewCallVM(4096);
assert(vm);
DCCallback* pcb = dcbNewCallback("dd)d", mul_cbHandler, 0);
assert(pcb);
callbReceiver((fptr_d_dd)pcb);
dcbFreeCallback(pcb);
dcFree(vm);
}
int main(void) {
testCallback();
printf("q\n");
return 0;
}