不用LIB的动态链接库 ,我用Loadlibrary()  和 GetProcAddress() 来加载和获得函数地址。
比如 DLL的 CPP文件如下:
exterv "C" _decpesc(dllexport) int sum(int i, int j) ;int sum(int i, int j)
{
  return i + j ;
}Def:
LIBRARY   ***
EXPORT    sum ;在调用文件中:
 int main()
{
    HMOUDLE hlibrary = Loadlibrary("**.dll") ;
    MyFunName pfnSum = (MyFunName)GetprocAddress(hlibrary,"sum") ;    //后面是对sum函数的使用,就不写了,就是很简单得 cin输入 cout输出.....
}可是程序运行 等我输入 一个整数时就错误 退出。
但是如果我在DLL创建中 sum不带形参 直接sum();
那样的话,程序就不会出错为什么?。为什么调用 有形参的 函数 不用LIB的DLL就会出错,而用LIB的DLL就没问题?

解决方案 »

  1.   

    exterv "C" 和def文件不能同时使用的。
      

  2.   

    MyFunName是怎样声明的?typedef int (__stdcall *PSum)(int, int);
      

  3.   

     extern "c" 不能和DEF同时使用啊?
    可是之前 我用带有lib的都可以啊?
      

  4.   

    MyFunName 没有声明啊 那个不是 WINDOOWS内部的 变量形式么?
      

  5.   

    exterv "C" _decpesc(dllexport) int sum(int i, int j) ;
    ?
    我刚做了下测试,没问题啊你用depends.exe看看导出的函数到底是什么样子
      

  6.   

    我知道哪里问题了...
    我在DLL里面定义的函数sum 只是普通的int 类型 但是执政类型的声明却是WINAPI的 所以是错误。如果用WINAPI的话 DLL里面的函数就必须是 CALLBACK WINAPI了类型的。我只要把WINAPI删了就可以了。。
    很谢谢大家啊。。