gpt4 book ai didi

c++ - 如何将函数传输到匿名管道 WinAPI?

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:15 25 4
gpt4 key购买 nike

我需要向匿名管道写入类似 double (*fun)(double) 的东西,但是下面的 WriteFile(pipe, fun, 4, written_bytes, 0) ReadFile(read_pipe, fun, 4, written_bytes, 0) 时导致管道接收器出错。有什么方法可以做到这一点?

我有一个想法。我可以创建一个具有相同类型字段的结构:

struct Foo
{
double (*f)(double);
};

然后我写它 WriteFile(hWritePipe_StdIN, &to_process, sizeof(Foo), &bytes, 0);但我有问题,管道接收器永远不会结束读取数据:ReadFile(hReadPipe, &to_process, sizeof(Foo), &bytes, 0);

最佳答案

它有一些问题:

首先,你应该知道函数的大小。如果这样做,您只需调用 WriteFile(pipe, funcPtr, funcSize, ...) 来传输它。

其次,该函数应仅包含 position-independent code ,并且不处理任何数据。例如。这样的功能将不起作用:

double fun(double x)
{
int arr[10000]; // implicit function call (alloca or something like this)
printf("some");
static int some = 1;
return globalVal + (++some);
}

因为函数printf会有不同的地址,并且在另一个进程中不会有静态变量和字符串。
(好吧,也许您也可以传输数据,但您无法生成 PI 代码。)

因此,在所有这些限制下,您可以发送一个函数:

__declspec(naked) double fun(double x) { __asm ret }

const auto funcSize = 1;
WriteFile(pipe, &fun, funcSize, ...);

关于c++ - 如何将函数传输到匿名管道 WinAPI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13878152/

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