This question is intersting.
project ->setting->link
there are many many resouce of this kind in net

解决方案 »

  1.   

    需要一个def文件,当然COM更好
      

  2.   

    不需要def文件。
    DLL中引出的函数的需声明为类似下面的类型:
    #ifdef __cplusplus
    extern "C" {
    #endif
       __declspec(dllexport) void WINAPI someFunc1(void);
       __declspec(dllexport) int WINAPI someFunc2(int, char *);
    #ifdef __cplusplus
    }  // extern "C"
    #endif同时提供一个头文件,供调用DLL的程序使用,只要将上面的dllexport改成dllimport即可。
      

  3.   

    不使用DEF文件,使用C方式进行声明DLL
    在接口函数当中,使用标准C声明的变量类型,不使用VC的自有变量,比如CString,CRect等类型的变量,通过int,char,long等基本类型来实现
      

  4.   

    通用的最好还是做成COM,这样其他语言编写的程序也能调用。
    如果你的DLL只是让别人调用你的几个输出函数的话,比如是钩子DLL,按照azuo_lee说的做最好。
    wyzegg说的用def,其实效果是和azuo_lee是一样的,都是防止C++编译器把输出函数的名字按微软的规则改变。我是推荐用COM,这样没有版本问题,改接口时不需要调用程序重新编译,等等好处,现在也许用不到,但是将来你升级时就会意识到。
      

  5.   

    谢谢各位的回答,我用azuo_lee说的方法做过,在VC中调用没有任何问题,在PB中却不行,哪位能给一个简单的具体的例子吗?我的E-mail是[email protected]
      

  6.   

    要在delphi中调用vc又如何呢?
      

  7.   

    我就是用pb调用的.我的经验是
    1.声明要写 extern "C" __declspec(dllexport) int yourfun();
    2.def文件也要加上 yourfun
      

  8.   

    dll的头文件里:
     extern "C" _declspec(dllexport) _stdcall yourfun();
    dll的。cpp文件里
     extern "C" _declspec(dllexport) _stdcall yourfun()
    {
    }
    编译通过后,把*.lib和*。dll拷贝到你的应用程序目录下,在project->setting->link->object/libray中写上*.lib.
    然后在应用程序中也要声明:
    extern "C" _declspec(dllimport) _stdcall yourfun()然后就可以调用了之所以加入_stdcall ,是为了能在其他语言中调用