C++ C++;Pass结构和;跨DLL边界的函数指针

C++ C++;Pass结构和;跨DLL边界的函数指针,c++,dll,struct,C++,Dll,Struct,在Kernel.dll中,定义了结构和函数指针: struct Data // blahblah void (*Callback)(const Data & data); 在Tool.dll中,有一个util函数: void GetData(Callback callback) { // create a thread with "ThreadProc()" method, and pass the callback in } void ThreadProc() {

在Kernel.dll中,定义了结构和函数指针:

struct Data // blahblah
void (*Callback)(const Data & data);
在Tool.dll中,有一个util函数:

void GetData(Callback callback)
{
    // create a thread with "ThreadProc()" method, and pass the callback in
}

void ThreadProc()
{
    Data data;
    // fill the struct
    if (callback) callback(data); // this "callback" is the callback func ptr passed to "GetData()" func above.
}
在main.exe中,有真正的逻辑:

void OnData(const Data & data)
{
    // do something
}

int main()
{
    GetData(&OnData);
}
一切运行良好,但“堆已损坏”

该死的是,即使我删除了“OnData”处理程序中的所有代码,损坏仍然存在。但是如果我不传递任何回调函数(nullptr),那么损坏就消失了。似乎传递到DLL的函数触发了问题

“DLL边界”的魔力是什么?这些天来,我听到了很多这样的事情。是什么技术导致了这种神奇的“边界”?什么样的事情需要特别注意