C++ C++;Pass结构和;跨DLL边界的函数指针
在Kernel.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() {
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边界”的魔力是什么?这些天来,我听到了很多这样的事情。是什么技术导致了这种神奇的“边界”?什么样的事情需要特别注意