我这里在C语言里面调用dll的时候,发现了比如
int aa
打印出来 aa 的地址是 12200000
然后调用了一个 test(aa)的Dll函数
然后在打印出 aa的地址是 12248000
不知道是什么原因?DLL代码如下:
int __stdcall SmsRecv(const char* cFileName,char * MsgId,char * MsgContent)
{
...
return 1
}C语言中调用的代码如下:
int main(int argc, char *argv[])
{
HINSTANCE hDll; //DLL句柄
SmsRecv addFun; //函数指针
hDll = LoadLibrary("SmsApiDll.dll");
if (hDll != NULL)
{
addFun = (SmsRecv) GetProcAddress(hDll, "SmsRecv");
if (addFun != NULL)
{
int result;
char PhoneFrom[20];
char MsgId[22];
char MsgContent[512] ; printf("==========Dll调用前的地址:");
printf("PhoneFrom=%d\n",PhoneFrom);
printf("MsgId=%d\n",MsgId);
printf("MsgContent: = %d\n",MsgContent);
result = addFun("rec.ini",MsgId,MsgContent);
if (result == 0)
{
printf( "*************Successful***************") ;
printf("==========Dll调用后的地址:");
printf("PhoneFrom=%d\n",PhoneFrom);
printf("MsgId=%d\n",MsgId);
printf("MsgContent: = %d\n",MsgContent);
}
}
}
}
int aa
打印出来 aa 的地址是 12200000
然后调用了一个 test(aa)的Dll函数
然后在打印出 aa的地址是 12248000
不知道是什么原因?DLL代码如下:
int __stdcall SmsRecv(const char* cFileName,char * MsgId,char * MsgContent)
{
...
return 1
}C语言中调用的代码如下:
int main(int argc, char *argv[])
{
HINSTANCE hDll; //DLL句柄
SmsRecv addFun; //函数指针
hDll = LoadLibrary("SmsApiDll.dll");
if (hDll != NULL)
{
addFun = (SmsRecv) GetProcAddress(hDll, "SmsRecv");
if (addFun != NULL)
{
int result;
char PhoneFrom[20];
char MsgId[22];
char MsgContent[512] ; printf("==========Dll调用前的地址:");
printf("PhoneFrom=%d\n",PhoneFrom);
printf("MsgId=%d\n",MsgId);
printf("MsgContent: = %d\n",MsgContent);
result = addFun("rec.ini",MsgId,MsgContent);
if (result == 0)
{
printf( "*************Successful***************") ;
printf("==========Dll调用后的地址:");
printf("PhoneFrom=%d\n",PhoneFrom);
printf("MsgId=%d\n",MsgId);
printf("MsgContent: = %d\n",MsgContent);
}
}
}
}
==========Dll调用前的地址:PhoneFrom=1245004
SpCode=1244980
MsgContent: = 124464
==========Dll调用后的地址:PhoneFrom=1244876
SpCode=1244852
MsgContent: = 1244336不知道为什么调用了Dll后,就会把我传进去的两个指针的值修改了