编译 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
下面是配置过程:
作者的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);
工程文件中加入 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源文件的引用。