dll中的函数可以知道是哪个程序调用自己了吗,该怎么处理

dll中的函数可以知道是哪个程序调用自己了吗
不使用函数参数的方式调用外

------解决方案--------------------
GetModuleHandle,GetModuleFileName
------解决方案--------------------
不知道
------解决方案--------------------
有一个办法,不是100%可靠。

就是通过Stack Walk找到第一个栈上不是你Module的地址。假设你的函数不是自己叫的,你可以根据Frame Pointer的值(ebp) 找到你这个函数的返回地址,这个地址应该是调用你函数的程序的执行段地址。根据这个地址就可以得到程序的信息。

这个方法不是十分有把握,如果你的函数经过FRO(Frame pointer optimization)了,这个信息就找不到了。
------解决方案--------------------
GetProcessThreadId()取得当前进程id,然后OpenThread也能取得句柄。就能获得调用程序的路径。
------解决方案--------------------
上面说错了,开始是用GetCurrentProcessId()。
------解决方案--------------------
如果调用程序直接是.exe,当然可以用GetModuleFileName,或者通过Process信息得到。不过楼主大概是问哪个DLL。
------解决方案--------------------
用GetModuleHandle(NULL)能返回调用进程的HMODULE,至于这个返回值能得到什么就不知道了.