2016-01-11 2 views
0

Я подготовил минимальный воспроизводимый пример.ошибка обратного вызова 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; 
} 

ответ

0

Я написал разработчику и получил немедленный ответ.

Версия 0.9 manual.pdf Недопустимые лимиты лимитов возврата к i или f. Мы можем указать d.

Подтверждено, что оно работает.

Смежные вопросы