用AppWizard生成了一个mfcappwizard(dll),向连入vc的程序中去。我是这么作的:
一、用AppWizard生成了一个mfcappwizard(dll),命名为MyDll
   1、在MyDll.cpp中添加函数:
   void DllTest(void)
   {
      AfxMessageBox("this is a dll function");
     }
   2、在MyDll.def中添加
     ;DllTest      @1
二、建立一个应用程序UseDll,添加一个按钮,
    1、在view.cpp中定义变量如下:
    HINSTANCE dll_handle=NULL;
    typedef void (*DLLTEST)(void);
    DLLTEST DllTest;
    2、在OnButton()中添加代码:
     Dll_handle=LoadLibrary("...\...\...\Mydll.dll");//dll文件的路径
     DllTest=(DLLTEST)GetProcAddress(Dll_handle,"DllTest");
     DllTest();
     FreeLibrary(Dll_handle);在程序中执行到OnButton()时,系统就提示内存不能读,请问如何解决?

解决方案 »

  1.   

    1,搞清你调用动态连接库时,用隐式还是显示调用。
    2,dll代码改成   
    __declspec( dllimport ) void DllTest(void)
    {
       AfxMessageBox("this is a dll function");
    }试试。
      

  2.   

    ;DllTest      @1
    上面跟在";"后是表示注识,这样写不起作用函数定义成:
    extern "c" AFX_API_EXPORT void DllTest(void);
      

  3.   

    楼上说得对,
    DEF文件中的,如果行的开头是个;,相当于CPP中的//,是注释.拿掉它.函数要不要定义为extern "C",你可以试试,我的概念是如果有了DEF文件,应该是可以不要这个修饰的.
      

  4.   

    当你编译完DLL之后,倒一下你的DLL,看看你要的函数有没有被导出。!!
    DllTest=(DLLTEST)GetProcAddress(Dll_handle,"DllTest");  
    //此句应该检测一下是否成功取到函数指针。
      

  5.   

    有了这句extern "c" AFX_API_EXPORT void DllTest(void);
    就不用在def文件中定义了(省得麻烦)
      

  6.   

    有了这句extern "c" AFX_API_EXPORT void DllTest(void);
    就不用在def文件中定义了(省得麻烦)