现在A.exe 调用B.dll. 是使用动态链接方式的,但是发现调用B.dll导出的函数的时候,参数的地址会变化,从而导致错误。
比如:我在A里面分配一个数组arr[100].arr的地址是0x000a,作为参数传入B的接口,跟踪到B里面后,发现参数的地址变成了0x000b,请问是咋回事阿。此外,我读些ini文件的时候,读出来的字符串前面总是多4个byte的无用数据,郁闷阿。有兄弟知道咋回事不

解决方案 »

  1.   

    没遇见过。
    dll的接口是怎样定义的?外部程序是怎样调用dll的接口的?
      

  2.   

    http://community.csdn.net/Expert/TopicView1.asp?id=5764928
    看看这个,在.def文件中写入需导出的函数,再重新编译
      

  3.   

    现在我可能怀疑不是dll的问题,而是本省这个exe的哪些地方编译选项设置不对导致的问题。
    因为它读些ini文件的时候,一样会在有用信息前加4个byte来,很奇怪,有谁碰到过,急求
      

  4.   

    参数没错,我分别尝试了CString和TCHAR。
    ps:函数的声明和调用都是采用的__stdcall方式
      

  5.   

    unicode好像也不像,因为我没有设置unicode的选项。
    exe的preprocessor definition:WIN32,NDEBUG,_WINDOWS,_MBCS
    dll的preprocessor definition:WIN32,NDEBUG,_WINDOWS,_MBCS,_USRDLL,DLL_EXPORTS,_WINDLL
      

  6.   

    现在的关键是即使不用dll,就在exe中读一个ini文件,用
    ::GetPrivateProfileString读出来的字符串前面都多了4个bytes,先要把这个文件解决。因为我调用dll的时候,也是前面4个byte是慕名奇妙的。3Q!
      

  7.   

    再说明一下,就是用strcpy这样的函数,拷贝的地址也是从第4个byte开始的,好像自动偏移了,这么多年,第一次碰到这样的问题,哎
      

  8.   

    使用这个函数GetPrivateProfileString()的部分给贴出来吧,大家帮你看看.
    这样更好解决问题.
    有时,出现的问题可能和描述的问题之间的差距是比较大的。
      

  9.   

    TCHAR szMail[100];
    ::GetPrivateProfileString(_T("EMail"),_T("YourEMail"),_T(""),szMail,100,strUserKeyInFile);
      

  10.   

    楼主应该遇到了字节对齐问题,就是调用方和被调用方的字节对齐方式不一样,导致参数莫名其妙的改变你要查查VC的编译选项,嗯,好像在Project->setting->c\c++ -> Code xxx -> Struct number什么的,具体忘了,你看看设置的是 1byte 还是 8 bytes 之类的,保证调用方和被调用方一样!
      

  11.   

    我的环境是:vs2003,xp,没有出现你说的多四个字节的问题呀。