2 lc boyi Lc_BoYi 于 2016.03.21 13:08 提问

获取DLL文件函数指针......

直接用函数名不能获取地址
....
....
typedef void(*Fun)();
Fun P=(Fun)GetProcAddress(P,"print"); //此处无法获取
Fun P=(Fun)GetProcAddress(P,MAKEINTRESOURCE(1));//却可以 MAKEINTRESOURCE这应该是dll文件里面的函数列表 第一个函数就是“print”第二函数print2就是MAKEINTRESOURCE(2);
.....
.....
那么问题就是 第一种方式为啥不行???????????(字符集是多字节字符集)

2个回答

zuishikonghuan
zuishikonghuan   2016.03.21 16:10
已采纳

导出的符号不一定就是函数名字,你可以使用VS自带的dumpbin来查看导出的符合名字是什么,如果想让他是函数名字,可以用def文件导出符号。

zuishikonghuan
zuishikonghuan 前提是dll你有源码,不然只能用别人已经导出的符合
一年多之前 回复
Lc_BoYi
Lc_BoYi   2016.03.21 18:40

现在可以了

dll中的代码是这样的
#include
using namespace std;
void _declspec(dllimport) print2();

void print2()
{
cout<<"this is dll2"<<endl;
}
void _declspec(dllimport) print3();
void print3()
{
cout<<"this is dll3"<<endl;
}

为什么dumpbin查出来的是?print2@@YAXXZ 而不是print2()??
1 0 0001105F ?print2@@YAXXZ = @ILT+90(?print2@@YAXXZ)
2 1 00011208 ?print3@@YAXXZ = @ILT+515(?print3@@YAXXZ)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!