msdn里 说 dllexport函数可以在dll里,也可以在exe文件里
但是我为什么不用调用 exe文件里dllexport函数?//in project1.exe 
extern "C" __declspec(dllexport)
void _stdcall fun()
{
    MessageBox(NULL,"Hello","ddHello",0);
}//另一个调用project1.exe的dllexport程序
void _stdcall (*dll_fun)();
HINSTANCE h=LoadLibrary("Project1.exe");
if(h)
        {
         (FARPROC)dll_fun=GetProcAddress(h,"fun");
          if(dll_fun) 
                  dll_fun() ; //非法错误。
        }

解决方案 »

  1.   


    改一下://另一个调用project1.exe的dllexport程序
    typedef void _stdcall (*dll_fun)();
    dll_fun pfun;
    HINSTANCE h = LoadLibrary("Project1.exe");
    if(h)
            {
             pfun = (dll_fun)GetProcAddress(h,"fun");
              if(pfun) 
                      (*pfun)() ; 
            }
      

  2.   

    在最后加一句:FreeLibrary(h);
      

  3.   

    把.exe添加到工程文件里边,声明一下函数,
    就可以调用了(静态连接)
      

  4.   

    typedef void  (__stdcall *DLL_FUNC)();
    HINSTANCE hInst=LoadLibrary("win32.exe");
    DLL_FUNC f=(DLL_FUNC)GetProcAddress(hInst,"_fun@0");
    f() ;
      

  5.   

    extern "C" _declspec(dllimport) ..................
      

  6.   

    你要把Project1.exe拷到测试工程的文件夹里,我给出的代码是试验成功了的。
      

  7.   

    你用什么编译器?
    我project1.exe是用bcb做的。
    测试程序用bcb,vc ,lcc都没有成功。
    不知道为什么
      

  8.   

    嘿嘿···
    这个是因为loadlibrary在load exe时并不会初始化其imports tables,所以调用外部api就会非法操作。你把exe地输出函数改为一个简单地计算或者只是返回某个值就可以了.
    记住不要调用其他dll里面地函数,如果要用crt lib地话,静态连接进去
      

  9.   

    那么不用loadlibrary ,有没有其他函数可以初始化imports tables
      

  10.   

    手工load~
    bo2k源码里面有那个函数可以用,需要改一些的