发布MIDAS客户端,除客户端exe文件外,还需发布midas.dll (delphi5) ,怎样把该文件包含入exe文件!!--by wzs &l

  • 主题发起人 主题发起人 wzs
  • 开始时间 开始时间
用资源文件最简单, 只需要在你的exe的initialization部分加进读resource的
部分, 然后将读取的resource写到一个dll文件中然后注册一下就可以了嘛.
至于如何将dll包含进exe的资源文件里, 那很简单啦. 写个.rc, 用命令行
编译成.res就可以了.
 
我仅是个看客,感觉ANOTHER_EYES的方法可行。^0^还要继续关注..
 
如果要按要求说的那样,也只有把DLL大包放入资源了,实际上这样有时也是有必要的
至少我以前的一个程序里就是这样做的……
写一个RC文件内容如……
ZIPDLL RCDATA "zipdll.dll"
UNZDLL RCDATA "unzdll.dll"
直接在project manager里加入到当前project里即可
然后使用前展开,如
with TResourceStream.Create(hInstance, 'ZIPDLL', RT_RCDATA)do
try
SaveToFile(ExtractFilePath(ParamStr(0)) + 'ZIPDLL.DLL');
finally
Free;
end;
用完删除……如果需要注册……看看下面的代码
以前用BCB写的,懒得转成DELPHI,
凑合着看吧,反正差不多的……应该够详细了吧,hehe
bool __fastcall TfrmMain::RegisterIt(const AnsiString strFileName) const
{
/*
STARTUPINFOA si;
PROCESS_INFORMATION pi;
AnsiString AppName(NormalDir(GetSystemDir()) + "RegSvr32.exe"),
CmdLine(" /"" + strFileName + "/"");
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW;
return CreateProcess(AppName.c_str(), CmdLine.c_str(),
NULL, NULL, false, 0, NULL, NULL, &si, &pi);
*/
bool bResult;
HINSTANCE hOcx = LoadLibrary(strFileName.c_str());
try
{
FARPROC DllRegisterServer = GetProcAddress(hOcx, "DllRegisterServer");
if(NULL == DllRegisterServer)
bResult = false;
else
bResult = (S_OK == DllRegisterServer());
}
__finally
{
FreeLibrary(hOcx);
}

return bResult;
}
//---------------------------------------------------------------------------
bool __fastcall TfrmMain::RegisterOcx(void) const
{
AnsiString SystemDir = NormalDir(GetSystemDir());
if(FileExists(SCRIPT_CONTROL_OCX))
{
return RegisterIt(AnsiString(NormalDir(ExtractFilePath(ParamStr(0))) + SCRIPT_CONTROL_OCX));
}
else
{
if(FileExists(SystemDir + SCRIPT_CONTROL_OCX))
{
return RegisterIt(SystemDir + SCRIPT_CONTROL_OCX);
}
else
{
dlgOpenOcx->InitialDir = SystemDir;
dlgOpenOcx->FileName = SCRIPT_CONTROL_OCX;
if(dlgOpenOcx->Execute())
return RegisterIt(dlgOpenOcx->FileName);
else
return false;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Init(void)
{
try
{
SC = CreateOleObject(PID_SCRIPT_CONTROL);
}
catch(EOleSysError &E)
{
if((CO_E_CLASSSTRING == E.ErrorCode) ||
(REGDB_E_CLASSNOTREG == E.ErrorCode))
{
if(RegisterOcx())
{
SC = CreateOleObject(PID_SCRIPT_CONTROL);
}
else
{
MessageDlg("控件注册失败,程序无法正常使用!", mtError, TMsgDlgButtons() << mbAbort, 0);
Application->Terminate();
}
}
else
throw;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender)
{
Init();
}
 
Delphi自带的IS Expression 就可以将Midas.dll一起发布,很方便。
 
问题是,展开就没意义了
 
多层体系结构发布得瘦客户就是1+1格式
还能少?(蹭分来的)
 
为了'一行'的名声,开始发分!!!
谁有精辟的论调赶紧!!!!
 
怎么发不了分!!!!!
 
想法本身就有错吧,dll不应该压到exe里去吧,可能可以用安装工具压到
install.exe里去,然后在发放到system中去
 
好象没有什么办法:(
一定要如此就改用ASTA
 
不可能的事情
 
这问题很好,要瘦瘦到低,只有一个EXE文件.
不过要把Midas.dll加到EXE中现在还不行,
若能加进去,多个瘦客户端程序时,想瘦瘦也不起来.(因为大家都加入Midas.dll)
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部