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

rummy 2003-10-17 09:41:44
我的程序可以自动生成一个dll文件放在文件流里,我不想把它存到硬盘上而直接装载它可以吗?
...全文
35 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
reallike 2003-10-17
  • 打赏
  • 举报
回复
function ProtectFile就是保护文件的一个函数。

可以用它来锁定你的文件。

等你的application terminated之后,再删除你的dll文件就是了。

其实我给出的代码关键还是在第一个函数上。

第二个实际应用自己写吧。我没有时间了,今天中午就要奔赴上海工作了。

字体文件其实和dll一个性质,如果不提取出来,那是不能加载到内存的。

请记住。
reallike 2003-10-17
  • 打赏
  • 举报
回复
你可以放到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必须已文件形式加载到内存。
佣工7001 2003-10-17
  • 打赏
  • 举报
回复
to: reallike(认真学习Cpp用Cpp考虑delphi)
搬凳子来了
佣工7001 2003-10-17
  • 打赏
  • 举报
回复
不行!
除非你自己提取其中的代码
reallike 2003-10-17
  • 打赏
  • 举报
回复
嗬嗬,一般不可以。我来给你找个方法。
rummy 2003-10-17
  • 打赏
  • 举报
回复
给100分啊
没人要?!!

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧