能力值:
( LV5,RANK:60 )
|
-
-
2 楼
UPUPUPUPUPUPUP
|
能力值:
( LV12,RANK:650 )
|
-
-
3 楼
没看太明白,代码贴一下?
|
能力值:
( LV5,RANK:60 )
|
-
-
4 楼
多谢,下面是代码:
unsigned int temp;
HANDLE hLibrary;
FARPROC lpFunc;
hLibrary=LoadLibrary("test.dll");
lpFunc=GetProcAddress(hLibrary,"addtest");
if(lpFunc != NULL)
{
temp=0x12345678;
temp=lpFunc(temp); //就是这里编译通不过,如果把temp去掉就OK了,但是这样的话DLL里的参数就不对了
FreeLibrary(hLibrary);
}
else
{
Application->MessageBoxA("调用API失败?","错误",0);
}
//test.dll里的addtest函数的原形是 int addtest(int temp)
|
能力值:
(RANK:460 )
|
-
-
5 楼
把addtest()部分的代码也贴上来吧。
|
能力值:
(RANK:410 )
|
-
-
6 楼
改成这样大概就可以了。
unsigned int temp;
HANDLE hLibrary;
FARPROC lpFunc;
int (*MyFunc)(int temp);
hLibrary=LoadLibrary("test.dll");
lpFunc=GetProcAddress(hLibrary,"addtest");
if(lpFunc != NULL)
{
temp=0x12345678;
这里改成这样。
MyFunc = lpFunc;
temp = (*MyFunc)(temp);
// temp=lpFunc(temp); //就是这里编译通不过,如果把temp去掉就OK了,但是这样的话DLL里的参数就不对了
FreeLibrary(hLibrary);
}
else
{
Application->MessageBoxA("调用API失败?","错误",0);
}
//test.dll里的addtest函数的原形是 int addtest(int temp)
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
最初由 小虾 发布 改成这样大概就可以了。 unsigned int temp;
HANDLE hLibrary; FARPROC lpFunc; ........
谢谢虾XD,不过编译同不过
Error: E2034 Cannot convert 'int (__stdcall *)()' to 'int(*)(int)'
|
能力值:
(RANK:410 )
|
-
-
8 楼
语法类型检查不过关,我忘了你是使用C++的(C++的语法检查比较严格),上面的源码我用C是编译成功的。在C++里就要修改修改了。改成下面的就应该没问题了。
unsigned int temp;
HANDLE hLibrary;
FARPROC lpFunc;
typedef int (__stdcall *MyFunc)(int temp); //定义一个自己的函数指针
MyFunc _MyFunc; //声明一个自定义函数指针
hLibrary=LoadLibrary("test.dll");
lpFunc=GetProcAddress(hLibrary,"addtest");
if(lpFunc != NULL)
{
temp=0x12345678;
_MyFunc = (MyFunc)lpFunc; //将函数指针强制转成自己的函数定义
temp = _MyFunc(temp); //函数调用
// temp=lpFunc(temp); //就是这里编译通不过,如果把temp去掉就OK了,但是这样的话DLL里的参数就不对了
FreeLibrary(hLibrary);
}
else
{
Application->MessageBoxA("调用API失败?","错误",0);
}
//test.dll里的addtest函数的原形是 int addtest(int temp)
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
typedef int (WINAPI *paddtest)(unsigned int temp);
paddtest addtest;
addtest=(paddtest)GetProcAddress(hLibrary,"addtest");
temp=addtest(temp);
试试
|
能力值:
( LV5,RANK:60 )
|
-
-
10 楼
最初由 小虾 发布 语法类型检查不过关,我忘了你是使用C++的(C++的语法检查比较严格),上面的源码我用C是编译成功的。在C++里就要修改修改了。改成下面的就应该没问题了。 unsigned int temp;
HANDLE hLibrary; FARPROC lpFunc; ........ 嘿嘿,多谢虾兄,差不多通过了,还有最后一个错误
Error E2206 legal character' '(0xa1a1)
是发生在MyFunc _MyFunc;这里
|
能力值:
( LV5,RANK:60 )
|
-
-
11 楼
最初由 d1y2j3 发布 typedef int (WINAPI *paddtest)(unsigned int temp); paddtest addtest; addtest=(paddtest)GetProcAddress(hLibrary,"addtest");
temp=addtest(temp); ........
谢谢,编译通过,结果正确~
有时候真郁闷,ASM写这些真TMD的容易,C++里写都要受到语法限制
哪怕都是DWORD,却也要转换
|
|
|