请问如何将dll文件用内存映射后,运行?

解决方案 »

  1.   

    不是从硬盘上调用dll,而是从内存中!
      

  2.   

    若知道 Dll 在内存中的打开句柄, 则可以直接GetProcAddress(Handle, '函数名'); 即可调用.
      

  3.   

    把DLL映射到内存后,记下DLL在内存中的基址,再根据DLL的引出表得到引出函数的相对地址,再用相对地址加上DLL的基址就是这个函数在内存中的地址,GetProcaddress函数应该也是这样实现的吧.
      

  4.   

    如果DLL已加载在内存中的话,可以用GetModuleHandle得到其实例句柄,再用GetProcAddress就可以了
      

  5.   

    从内存中?如果dll已经加栽就直接向pankun(剑神一笑)所说的一样
      

  6.   

    支持一楼的!!这里有更详细的:uses Windows, ...;
    type  TTimeRec = record
        Second: Integer;
        Minute: Integer;
        Hour: Integer;
      end;  TGetTime = procedure(var Time: TTimeRec);  THandle = Integer;var  Time: TTimeRec;
      Handle: THandle;
      GetTime: TGetTime;
      ...
    begin
      Handle := LoadLibrary('DATETIME.DLL');
      if Handle <> 0 then
      begin
        @GetTime := GetProcAddress(Handle, 'GetTime');
        if @GetTime <> nil then
        begin
          GetTime(Time);
          with Time do
            WriteLn('The time is ', Hour, ':', Minute, ':', Second);
        end;
        FreeLibrary(Handle);
      end;end;
      

  7.   

    更正一下我说的dll不是用LoadLibrary加载的,而是用CreateFileMapping等内存映射函数加载后如何调用?