DLL函数和指针

时间:2014-02-24 00:11:42

标签: visual-c++ dll

我是DLL的新手,但不是C ++的新手。对于一个项目,我需要在DLL中实现一些函数。我的问题:我可以将指针从我的主项目传递到DLL中的函数而不用担心什么吗?我发现它很奇怪,因为我的主项目中的地址是亲戚,所以传递给DLL的地址应该意味着别的东西。在任何地方都有诀窍吗?

感谢。

1 个答案:

答案 0 :(得分:0)

同一地址空间中的任何模块(exe,dll等)都可以使用相同的指针。

当OS执行EXE时。它将EXE加载到EXE头中指定的地址的虚拟内存中,或者如果启用了EXE支持重定位和ASLR(地址空间布局随机化),则将其随机化地址。然后,依赖项(EXE使用的所有DLL)将被加载到同一地址空间中。

在模块之间传递指针时要担心的是分配和释放。您必须使用相同的相应功能来释放内存。如果使用HeapAlloc,则必须使用HeapFree释放具有相同堆的内存。

在Visual C ++中,真正的问题是mallocfreenewdelete)。想象模块Amalloc分配一块内存,并用Visual C ++ 8.0编译。使用Visual C ++ 9.0编译的模块B。在这种情况下,您无法在模块free中使用B来释放模块malloc中由A分配的内存块,因为它不是相同的功能