这个dll要在VC2008下编译!
在网上找到一个事例http://blog.csdn.net/codehat/archive/2009/08/12/4439465.aspx但是这里面的那个GetMyDllVersion函数是没有带参数的,即不是GetMyDllVersion(int x,int y)这种形式。按照那个不带参数编译出来的dll,用另一种语言调用此dll中的GetMyDllVersion函数没有问题,但是带了参数就不能调用。不知道,如果函数带了参数,这种情况的dll该怎么写?希望高手指点!

解决方案 »

  1.   

    导出函数带参数就行了。例如:
    MYDLLTEST_API UINT32 GetMyDllVerion(int x,int y)  
    {  
      return x+y;  
    }  
      

  2.   

    针对楼上的我想说一下具体情况,因为我不知道您说的导出函数带参数就行了是不是我以下这种写法:我建了一个MYDLL的工程,在MYDLL.h里面有下面的代码
    MYDLL_API int fnMYDLL(void);
    MYDLL_API int MaxNumber(int y,int x);
    而在MYDLL.cpp文件里我写了以下代码
    MYDLL_API int fnMYDLL(void)
    {
    return 42;
    }
    MYDLL_API int MaxNumber(int x,int y)
    {
    if (x>y)
    return x;
    return y;
    }
    在导出符号定义的文件里我填的是如下内容
    LIBRARY "MYDLL"   
    EXPORTS     
    MaxNumber
    fnMYDLL
    在编译生成dll文件后,我在易语言里使用LoadLibraryA、GetProcAddress进行调用写的上面两个函数,只有fnMYDLL调用成功,而MaxNumber怎么也调用不成功,总是提示调用函数发生堆栈错误!也就是说,函数带了参数就调用出错,我不知道上面的哪一步写错了,希望贵人指点!
      

  3.   

    基本上可以确定是函数调用约定不对,
    函数没加extern "C" __stdcall
      

  4.   

    不同语言缺省调用约定是不一样的,和如何编译没有关系。lz看看这个http://blog.vckbase.com/arong/archive/2004/06/09/409.html
      

  5.   

    非常感谢zwfgdlc的指点与arong1234提供的信息,确实是调用约定出了问题!把我上面的代码MYDLL_API int 改写成int __stdcall 就没有问题了。非常感谢您们的回答。给分不是重点,但是基于原则,给第一位指点者!再次感谢您们抽时间来关注一个看似不成问题的问题!