编译 JWSCL(JEDI Windows Security Code Lib) 的方法(rev316)

JWSCL(JEDI Windows Security Code Lib)是JEDI的安全开发库,包括很多系统安全相关的库和例子。目前JWSCL还没有像JEDI Code Library那么成熟,其中Bug较多,且安装不便。这里记录一下JWSCL的编译设置过程,避免以后走弯路。

作者的Blog:http://blog.delphi-jedi.net/2008/03/03/jwscl-release-revision-316/
作者关于JWSCL的配置文档:http://blog.delphi-jedi.net/2008/03/03/2008/03/03/how-to-setup-jwscl/

这里使用的JWSCL是 JEDI Windows Security Code Lib - Revision 316
可以到 http://sourceforge.net/projects/jedi-apilib/files/ 下载,或者直接点击下面zip文件链接:
jedi_api_wscl_rev316.zip
       8.1 MiB


下面是配置过程:
解压缩 jedi_api_wscl_rev316.zip,使用 Delphi 2007 打开 jedi-api-lib\jwapi\trunk\Workspace\DJediApilib.dpk (注意:D2009无法编译通过,JWSCL的Unicode支持不好)

工程文件中加入 
Search Path: "..\Common" -> Build 
出现错误1
[Pascal Fatal Error] JwaRpcDce.pas(73): F1026 File not found: 'JwaRpc.dcu'
忘了加 "..\Win32API"

加入 Search Path: "..\Common;..\Win32API" -> Build 
错误2
[Pascal Error] JwaQosSp.pas(146): E2003 Undeclared identifier: 'USHORT'
类型不对,强制使用JwaWinType。文件头部
interface

uses
  
{$IFDEF USE_DELPHI_TYPES}
  
Windows,
  
{$ELSE}
  JwaWinType,
  
{$ENDIF USE_DELPHI_TYPES}

  
//{$IFDEF USE_DELPHI_TYPES}
  
//Windows,
  
//{$ELSE}
  JwaWinType,
  
//{$ENDIF USE_DELPHI_TYPES}


确定 ..\Win32API 目录下生成了 JwaWindows.dcu 文件(rev316的约4.22 MB)
将生成的所有DCU复制到 jedi-api-lib\jwscl\trunk\JwaDCU 目录(自己建个文件夹JwaDCU),避免重复编译。


【下面可以开始编译例程了】
例如最简单的 jedi-api-lib\jwscl\trunk\examples\Hash,打开dpr
设置 Search Path: "..\..\source;..\..\JwaDCU"
提示错误3
[Pascal Fatal Error] JwsclTypes.pas(45): F1026 File not found: 'JwaVista.dcu'
看来还有东西没编译,继续回到 DJediApilib.dpk,添加 JwaVista.pas (其他dcu没找到也可以同样处理)

Build OK!

SimpleMD5的两个错误
[Pascal Error] SimpleMD5.dpr(29): E2010 Incompatible types: 'Pointer' and 'Char'
[Pascal Error] SimpleMD5.dpr(33): E2250 There is no overloaded version of 'RetrieveHash' that can be called with these arguments
去掉^,传入参数1是指针。这个例子可能是之前的版本:
29:  Hash.HashData(PChar(Data), Length(Data));
33:    Hash.RetrieveHash(HashVal, Size);

SimpleMD5的运行截图:

WinStation ACL例程:



另外,不要让编译器去查找jwapi的源文件,要引用dcu文件才行,不然 JwaWindows.pas 肯定编译不通过。
如果编译时出现 JwaWindows.pas 里的错误(最常见的是找不到jediapilib.inc),请关掉Delphi检查下环境变量里有没有被加入 Win32API。
最简单的办法是用JCL的Install.bat编译JediInstaller.exe,然后点Uninstall卸载JEDI,这样可以根除jwapi源文件的引用。
posted @ 2009-08-25 20:43  bits  阅读(1795)  评论(1编辑  收藏  举报