如图,里面的_getd@16应该怎么调用呢? 我花了一晚上想都想不出. 用了动态调用不行. 得到函数的地址然后调用也不行,找了些资料, 看到vb可以使用Alias可以调用,我也试了 但是还是以失败告终. 那个DLL不是我的, 我记得以前我也有问过类似的问题, dll的作者他说是什么未导出的函数什么来着, 我也忘了. 现在那个作者2年没上了 - -,哎 只能怪当时不认真吧. 现在请问各位应该怎么去调用这个DLL里的那个_getd@16函数呢? 什么语言都行, 但最好是vb6或者delphi7 不是也无差- -!  急知道..

解决方案 »

  1.   

    可以根据函数Ordinal来调用的...GetProcAddress
      

  2.   

    使用函数的编号?GetProcAddress(hDLL, MAKEINTRESOURCE(3))?
      

  3.   

    普通函数调用例子
    typedef   void   (*DllFoo)(void);int   main(int   argc,   char   *argv[])
    {
            DllFoo   _DllFoo;
            HINSTANCE   hInstLibrary   =   LoadLibrary( "mydll.dll ");
            if   (hInstLibrary   ==   NULL)
            {
                      cout < < "载入dll失败 " < <endl;
                      FreeLibrary(hInstLibrary);  
                      system( "pause ");
                      return   1;
            }
            _DllFoo   =   (DllFoo)GetProcAddress(hInstLibrary, "DllFoo ");
            if(_DllFoo   ==   NULL)//运行后程序进入这里,显示“转换失败”后结束
            {
                      cout < < "转换失败 " < <endl;
                      FreeLibrary(hInstLibrary);
                      system( "pause ");
                      return   1;  
            }
            //以下程序没有运行
            DllFoo();
            cout < <endl;
            FreeLibrary(hInstLibrary);
            system( "PAUSE ");
            return   EXIT_SUCCESS;
    }
    不过你那个dll函数的参数要自己想办法了
      

  4.   

    这样试试:
    Declare Function getd Lib "xxx.dll" Alias "_getd@16" (ByVal Param1 As Long, ByVal Param2 As Long, ByVal Param3 As Long, ByVal Param4 As Long) As Long
      

  5.   

    忘说了 原型跟writeprocessmemory一样
      

  6.   

    我用过delphi7的name'xxx.dll'方式 但是可以读到数值 但是任何地址读到的都一样。
      

  7.   

    这个函数是什么样的功能?_getd@16中的@16通常是表示参数的总长度,16就是4个参数,而WriteProcessMemory是5个参数。
      

  8.   

    那是便宜,要加上基址。GetProcAddress(h,(LPCSTR)MAKEWORD(3,0));