C ++从数据结构传递lambda

时间:2016-03-18 12:28:02

标签: c++ dll lambda dllexport

我的进样器和dll中都有2个数据结构:

struct SubData_t
{
    int SubTest;
};

struct DataHolder_t
{
    int Test;
    SubData_t SubData;
};

这是我分配数据结构值的方式:

DataHolder_t *DataHolder = new DataHolder_t();
DataHolder->Test = 123;
DataHolder->SubData.SubTest = 456;

int ResponseCode = Inject(4321, "test.dll", DataHolder);

这是一个自定义的LoadLibrary函数,它将数据传递给dll export:

int Inject(DWORD ProcessId, char *DLLFile, DataHolder_t *Data)
{
    // ...
    LoadRemoteLibraryR(hProcess, lpBuffer, dwLength, NULL, 0xd13f5171 /* dllexport EntryPoint hash */, (LPVOID)Data, (DWORD)(sizeof(struct DataHolder_t) + 1));
    // ...
}

然后我在dll导出中获取数据并将lpUserdata中的值分配给数据结构:

DLLEXPORT BOOL EntryPoint(LPVOID lpUserdata, DWORD nUserdataLen)
{
    DataHolder_t *DataHolder = (struct DataHolder_t *)lpUserdata;

    char buffer[100];
    sprintf(buffer, "%d | %d", DataHolder->Test, DataHolder->SubData.SubTest);

    MessageBox(NULL, buffer, "Test", MB_OK);

    return TRUE;
}

然而,我是lambdas的新手,并且无法弄清楚如何(如果它甚至可能)将lambda(函数)以相同的方式传递给dll导出。或者是否有其他方法将函数/逻辑传递给dll导出,以便可以从注入dll的目标进程调用它们?

1 个答案:

答案 0 :(得分:0)

使用类型擦除,如std::function或合理的传真,并将类型擦除的参数作为参考传递,而不是传递值,以获得最佳效果。