gpt4 book ai didi

c - 从 64 位切换到 32 位时出现 dyncall 回调错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:00 29 4
gpt4 key购买 nike

我准备了一个最小的可重现示例。

当我使用 64 位 mingw 编译并链接到 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.9 manual.pdf 不再将返回签名限制为 if。我们可以指定d

确认它有效。

关于c - 从 64 位切换到 32 位时出现 dyncall 回调错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34717948/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com