引用 @owlsperspective on Twitter 2017/06/15 19:22 https://twitter.com/owlsperspective/status/875297347256762369
Delphiの無料版であるStarter SKUにソースがついていない(それ自体はやむを得ないが)ために
宣言のたぐいがエディタから見えなくて(ヘルプにはあるけど)初心者に全く優しくない件、
昔のPersonal SKUにはソース(ユニット)の interface部だけを.intファイルとして同梱してくれていたんだけど、
現在はそういうものも入っていない。
で探してみたらDelphi Compiled Units Parser (http://hmelnov.icc.ru/DCU/index.eng.html) というのがあって、
10.1 Berlinまでの対応なんだけど.dcuから逆コンパイルしてある程度宣言、定義を出力してくれるツールがあった。
ただしライセンスで逆コンパイル、リバースエンジニアリングが禁止されていた気がするので、
限りなく黒に近いグレーだということは明記しておく。
10.2 Tokyoについてはソースコードを数カ所変更することで対応できてるっぽい。
Starter SKUは入門用だと思うので、こんなことしなくてもいいように配慮をしてくれればいいのだけれども、
とりあえずそんな手もあるということで。忘れないようにメモ。
っちゅー事で 10.2 Tokyo 対応してみるよ。2 ファイルだけいじればいいよ。
[ DCU32.pas ]
10.2 TOKYO 用の定義 (verD_10_2) を追加し、MaxDelphiVer を 25 に変更するよ。
const {My own (AX) codes for Delphi/Kylix versions} verD2=2; verD3=3; verD4=4; verD5=5; verD6=6; verD7=7; verD8=8; verD2005=9; //2005 verD2006=10; //2006 verD2009=12; //2009 verD2010=14; //2010 verD_XE=15; //XE verD_XE2=16; //XE2 verD_XE3=17; //XE3 verD_XE4=18; //XE4 verD_XE5=19; //XE5 verD_XE6=20; //XE6 //verAppMethod=20; //AppMethod verD_XE7=21; //XE7&AppMethod verD_XE8=22; //XE8 verD_10=23; //10 Seattle verD_10_1=24; //10.1 Berlin verD_10_2=25; //10.2 Tokyo // ADD 10.2 TOKYO verK1=100; //Kylix 1.0 verK2=101; //Kylix 2.0 verK3=102; //Kylix 3.0 MaxDelphiVer = 25; // MOD 10.2 TOKYO
10.2 TOKYO 用の定義を追加するよ。
function TUnit.GetVersionStr: String; const verStrDelphi: array[0..MaxDelphiVer]of String = ( 'Error','Error 1','2','3','4','5','6','7','8','2005','2006','?2007','2009', 'Error 13','2010','XE','XE2','XE3','XE4','XE5','XE6','XE7','XE8','10 Seattle','10.1 Berlin', '10.2 Tokyo'); // MOD 10.2 TOKYO platfStr: array[TDCUPlatform]of String = ('Win32','Win64','Osx32', 'iOSEmulator','iOSDevice','iOSDevice64','Android');
最初の BVer が 10.1 Berlin ($1F) になっているのでここを $20 に変更するよ。
function TUnit.ReadMagic(Magic: ulong): Boolean;
...
if (BVer<=$20{10_2Tokyo})and(BVer>=$1B{XE6})and(PlMagic=$4D)or // MOD 10.2 TOKYO (BVer<=$1A{XE5})and(BVer>=$17{XE2})and(PlMagic=$4B)
[ DCUTbl.pas ]
10.2 TOKYO 用の定義を追加するよ。直前の 10.1 Berlin の所にカンマを追加するのを忘れずにね。
function GetVerTag(Ver: integer): String; const sVerName: array[2..MaxDelphiVer]of String = ( 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D2005', //2005 'D2006', //2006 '', 'D2009', //2009 '', 'D2010', //2010 'XE', //XE 'XE2', //XE2 'XE3', //XE3 'XE4', //XE4 'XE5', //XE5 'XE6', //XE6 'XE7', //XE7&AppMethod 'XE8', //XE8 '10Seattle', //10 Seattle '10_1Berlin', //10.1 Berlin // MOD 10.2 TOKYO '10_2Tokyo' //10.2 Tokyo // ADD 10.2 TOKYO );
10.2 TOKYO 用の定義を追加するよ。
function GetDelphiLibDir(VerRq: integer; MSILRq: boolean; PlatformRq: TDCUPlatform): String; { Delphi LIB directory autodetection } {$IFDEF Win32}
...
case VerRq of verD2..verD7: sPath := Format('SOFTWARE\Borland\Delphi\%d.0',[VerRq]); verD8: sPath := 'SOFTWARE\Borland\BDS\2.0'; verD2005: sPath := 'SOFTWARE\Borland\BDS\3.0'; verD2006: sPath := 'SOFTWARE\Borland\BDS\4.0'; // verD2007: sPath := 'SOFTWARE\Borland\BDS\5.0'; This version was not detected verD2009: sPath := 'SOFTWARE\CodeGear\BDS\6.0'; verD2010: sPath := 'SOFTWARE\CodeGear\BDS\7.0'; verD_XE: sPath := 'SOFTWARE\Embarcadero\BDS\8.0'; verD_XE2: sPath := 'SOFTWARE\Embarcadero\BDS\9.0'; verD_XE3: sPath := 'SOFTWARE\Embarcadero\BDS\10.0'; verD_XE4: sPath := 'SOFTWARE\Embarcadero\BDS\11.0'; verD_XE5: sPath := 'SOFTWARE\Embarcadero\BDS\12.0'; //verAppMethod: sPath := 'SOFTWARE\Embarcadero\BDS\13.0'; == verD_XE7 verD_XE6: sPath := 'SOFTWARE\Embarcadero\BDS\14.0'; verD_XE7: sPath := 'SOFTWARE\Embarcadero\BDS\15.0'; verD_XE8: sPath := 'SOFTWARE\Embarcadero\BDS\16.0'; verD_10: sPath := 'SOFTWARE\Embarcadero\BDS\17.0'; verD_10_1: sPath := 'SOFTWARE\Embarcadero\BDS\18.0'; verD_10_2: sPath := 'SOFTWARE\Embarcadero\BDS\19.0'; // ADD 10.2 TOKYO else Exit;
これで完了だよ。
DCU32INT DCUファイル名 INTファイル名
みたいな感じで変換できるよ。詳しくは -? または -h で使い方を確認してね。
|