http://www.codeguru.com/dll/index.shtml
上面有例子,不要说告诉我说是英语看不懂!

解决方案 »

  1.   

    将main函数改名,并用
    extern "C"                void  __declspec(dllexport) mainout()
    ~~~~~~~~~                 ^^^^  ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~
    函数栈方式按照C语法(可选)返回值  声明导出              你的函数名称和参数。project->settings->C++->preprocessor Definitions:
          "_CONSOLE"替换为"_DLL"
    project->settings->Link->object/library modules:
          "/subsystem/console"替换为 "/dll"
    同理,你如果是'_windows',replace with '_dll'
    if you are '/subsystem/windows' replace with '/dll'
      

  2.   

    to niu_a(阿牛):
    十分感谢!
    我还想知道: 看到msdn里所说的dllmain()是怎么回事?是不是 我想从dll中export任何函数或者变量都是这样?
    (你说的可选是 extern "C" , 还是 void?)               
      

  3.   

    extern "C"是可选的
    dllmain()是dll的主函数,你如果不写,编译器帮你生成一个
    下面是一个dllmain的简单形式
    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
     )
    {
        switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
    break;
        }
        return TRUE;
    }
    你如果有vc的话,可以生成一个win32 dynamic-link library,看看起生成的源代码,或者看一些win32编程的资料,应该比我说的准确和详细
      

  4.   

    我用VC6.0中生成了一个win32 Dynamic-link Library 的project(是空白的project,即不会自动产生dllmain()函数),然后我把我的C的file加入到project中(这些file有main()函数,我没有做任何改变),编译通过,产生了一个dll文件。请问这个dll文件是不是就应该是我要的dll文件?是不是我
    void  __declspec(dllexport) mainout();声明后的函数,别人才能调用,否则就不可以?
      

  5.   

    是不是在VC中用win32  Dynamic-link  Library 产生的dll文件只能用于win32的application 中,用MFC AppWizard(dll)产生的dll文件只能用于MFC的application中?
      

  6.   

    mfc app是一个调用mfc42*.dll的win32 app
                 ~~~~~~~~~~~~~也可以静态连接。
    还有vc6.0 有个tool Depends.exe 可以察看dll的导出(类,函数,变量等等)我想你可以先看看一些关于win32 dll的资料,大概了解一些,写起程序来就会顺手很多
      

  7.   

    我现在的问题:1 刚才我生成的dll文件是否正确?
                  2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数?
                  3 如果不正确是不是一定要写成dllmain()的程式
      

  8.   

    我现在的问题:1 刚才我生成的dll文件是否正确?
                  2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数?
                  3 如果不正确是不是一定要写成dllmain()的程式
      

  9.   

    我现在的问题:1 刚才我生成的dll文件是否正确?
                  2 如果正确是不是像niu_a(阿牛) 所说的那样声明可调用的函数?
                  3 如果不正确是不是一定要写成dllmain()的程式
      

  10.   

    1、2、呵呵,你刚才生成的dll文件显然不是你想要的,函数名都不正确。
    3、可以有多种形式,象def文件,在头文件中声明,但是意义都是一样的
      

  11.   

    to niu_a(阿牛) :举个例子:
    我写了一个c的file(至于其中code的细节不讨论),叫做file.c,
    void set(int i)
    {
        //empty
    }void swap(int a, int b)
    {
        //empty
    }void main()
    {
        int a,b;    set(a);
        set(b);
        swap(a,b);
    }
    (main () 是我将来想被别人使用的接口函数)
    我用VC编译通过。然后我新建一个WIN32 Dynamic-link  Library 的project,叫filedll, 选择空的project, 再把我的file.c加入到project中,然后编译通过,在..\debug\目录下产生filedll.dll文件,按照niu_a(阿牛) 说的,这是不正确的dll文件对吗?
    那么,接下来我是不是就要把file.c用dllmain()改写?还是我只要或者在DEF文件里声明我的接口main()就可以了?另外DEF文件不是自动生成的吧?自己写的?
      

  12.   

    com的dll可用ATL
    一般的dll可用VC的dll wizard生成。然后用exe调用dll。具体最好看书学。还有什么问题尽管问
      

  13.   

    我看了<<programming Visual C++ 5th Edtion>>,里面介绍的都是和MFC和WIN32有关的dll,但是dll好像不是微软的专利技术吧,早在windows前就有了,而我的dll又不想专用于windows下,想用标准的C写一个dll,那又如何?
    我试过了VC的dll wizard, 他的dllmain()不是只能用于win32 平台吗?
    而MFC Appwizard(dll)产生的又不是纯C的代码,而是MFC的啊!难道没有其它方法来写自己的dll了吗?
      

  14.   

    建立一个空的win32 dynamic link library工程
    把你要输出的文件加上__declspec( dllexport )然后build
      

  15.   

    建立一个空的win32 dynamic link library工程
    把你要输出的函数加上__declspec( dllexport )然后build
      

  16.   

    niu_a()啊牛兄讲的太好了, anyh() 我再接你的例子说两句:void main()
    {
        int a,b;
        set(a);
        set(b);
        swap(a,b);
    }
    整个的不要,函数说明、定义中加上__declspec(dllexport)
    void _declspec(dllexport) set(int i)
    {
        //empty
    }void _declspec(dllexport) swap(int a, int b)
    {
        //empty
    }最后编写一个.def文件LIABRARY "SW"
    EXPORTS
       set   @1
       swap  @2; OK了
    ; 应用程序中添加上该文件的 .lib 文件 即可
      

  17.   

    即使用main产生的exe也可以提供接口的。
    dll不一定好使用