http://laokaddk.blog.51cto.com/368606/670486
一个比较简单的做法就是如果自己要导出函数给别的EXE调的话.那个导出函数没有用到全局变量(就是说它用的变量都是调用者传入的) 那么可以不用考虑重定位的问题.比如:
导出函数给别人用的EXE:
extern "C" int __declspec(dllexport) add(int a,int b) { return a+b; }
调用有导出函数的EXE:
typedef int (*ADD)(int,int); void main() { ADD add; HMODULE hmod =LoadLibrary("exp.exe"); if (hmod) { add=(ADD)GetProcAddress(hmod,"add"); int x=add(3,3); } }
这种简单的就不用处理重定位的问题了.
PS:因为也可以导出变量.直接用GetProcAddress取导出的变量是取不到的.所以猜测结果如下:
函数地址的重定位直接交给GetProcAddress处理就行了.但是如果导出函数中用到了不是参数传入的变量就要自己处理重定位问题了.不然就报了个访问不允许的那个错误.