我这里在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);
                            }
                 }
         }
}

解决方案 »

  1.   

    打印出来的结果是:
    ==========Dll调用前的地址:PhoneFrom=1245004
    SpCode=1244980
    MsgContent: = 124464
    ==========Dll调用后的地址:PhoneFrom=1244876
    SpCode=1244852
    MsgContent: = 1244336不知道为什么调用了Dll后,就会把我传进去的两个指针的值修改了
      

  2.   

    会不会是SmsRecv的类型不对啊.
      

  3.   

    这个问题而且很奇怪,在SmsRecv函数中,就是有一句调用一个lib中的类函数的语句:result = apib->deliver(dr);如果我在SmsRecv函数中不调用此语句,编译后,执行起来参数的地址是不会发生改变的。但是一调用这个语句后,在return之前我打印出参数的地址查看,都还是正确的,但是return后,就是从子函数回到主函数后就发生了改变,真是晕啊!