我的程序可以自动生成一个dll文件放在文件流里,我不想把它存到硬盘上而直接装载它可以吗?

解决方案 »

  1.   

    to: reallike(认真学习Cpp用Cpp考虑delphi) 
    搬凳子来了
      

  2.   

    你可以放到temp文件夹里。然后用锁定的方法。Q:我有一些特殊语言的字体来用,它们存储在我的EXE文件里,但是两点。   * 我不想放到font文件夹里
       * 我不想从EXE文件里面提取出来如果可能,请告诉我。因为,我的字体是自己做的不是windows自带的,我想保护自己的东西。A:不太可能,必须提取出来。你可以使用这个保护过程来保护你的文件不被修改和删除。在EXE执行的时候把字体放到临时文件夹里,结束的时候删除它。function ProtectFile(sFilename : string) : hFile;
    var
           hf: hFile;
           lwHFileSize, lwFilesize: longword;
           ofs : TOFStruct;
    begin
           if FileExists(sFilename) then
           begin
                   hf := OpenFile(pchar(sFilename), ofs, OF_READ or OF_WRITE or OF_SHARE_EXCLUSIVE);
                   if hf <> 0 then
                   begin
                           lwFilesize := GetFileSize(hf, @lwHFileSize);
                           if LockFile(hf, 0, 0, lwFilesize, lwHFilesize) then
                           Result := hf else Result := 0;
                   end
                   else Result := 0;
           end
           else Result := 0;
    end;//..
    var
     ResS: TResourceStream;
     TempPath: array [0..MAX_PATH] of Char;
     TempDir: string;
    begin
     GetTempPath(Sizeof(TempPath), TempPath);
     TempDir := StrPas(Path);
     ResS := TResourceStream.Create(hInstance, 'SOME_FONT', 'RT_FONT');
     ResS.SavetoFile(TempDir+'some_font.ttf');
     ResS.Free;
     AddFontResource(TempDir+'some_font.ttf');
     SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
     ProtectFile(TempDir+'some_font.ttf');
    end;
    仅仅是提取保护字体文件的方法。DLL文件一样可行。你可以尝试这么做。文件流是一定不行,dll必须已文件形式加载到内存。
      

  3.   

    function ProtectFile就是保护文件的一个函数。可以用它来锁定你的文件。等你的application terminated之后,再删除你的dll文件就是了。其实我给出的代码关键还是在第一个函数上。第二个实际应用自己写吧。我没有时间了,今天中午就要奔赴上海工作了。字体文件其实和dll一个性质,如果不提取出来,那是不能加载到内存的。请记住。