Paweł P. filozof
Temat: JCL i JVCL czyli zostań JEDI
Problem: Nie udane dodanie biblioteki komponentów JEDI do D7 STD.Ponieważ instalacja całości nawet przy podaniu powyższemu czarodziejowi ścieżki do JCL nie przyniosła rezultatu,
wszedłem do D7PE IDE i odnalazłem paczkę JCL dla D7, i po kolei zainstalowałem kolejne komponenty.
Dobrze jest zmienić ścieżkę do przechowywania skompilowanych binariów komponetów z .../Delphi7/Project/BPL na
.../Delphi7/Bin
dziwne problemy
odczytanie readme
Teraz można było ponowić procedurę dla JVCL, w katalogu /packages
wybrałem pierwszy z brzegu w /D7per/JvGlobusD7D.dpk
Zaczęło krzyczeć, że nie ma JvCore i się zaczęło poszukiwanie .dpk.
Jest ich tam w różnych katalogach od metra. Zacząłem szukać czegokolwiek co da się skompilować. Znalazłem coś co po skompilowaniu dało mi
JVCLInstall.exe w jvcl/bin.
Po odpaleniu tego, już poprawnie znalazło do które IDE chce doinstalować JEDI. Co nie znaczy, że już się skończyło.
Aktualny problem, po wciągnieciu do IDE wszystkich projektów - plik grupy pakietów i wybraniu z menu 'Build all projects' pojawia się problem:
z kompilacją: JvComputerInfoEx.pas
function TJvCPUInfo.GetSSE: TJvSSEVersion;
begin
case GetCPUInfo.SSE of
1 : Result := vSSE1;
2 : Result := vSSE2;
3 : Result := vSSE3;
else Result := vNoSSE;
end;
end;
Expected Ordinal type, jasne case chce wartości numerycznej do dokonania wyboru.
sprawdzam więc typ
TJvSSEVersion = (vNoSSE, vSSE1, vSSE2, vSSE3);
i widzę zadeklarowaną klasę poniżej
TJvCPUInfo = class(TJvReadOnlyInfo)
private
function GetCPUInfo: TCPUInfo;
...
function GetSSE: TJvSSEVersion;
procedure SetSSE(const Value: TJvSSEVersion);
published
...
property SSE: TJvSSEVersion read GetSSE write SetSSE stored False;
i się zastanawiam, skąd tam się wzięło case
i czemu ma sprawdzać po numerkach coś co przyjmuje wartości TJvSSEVersion
i dlaczego własność obiektu SSE przechowuje False kiedy powinna np. vNoSSE
nie powinno być przypadkiem tak:
function TJvCPUInfo.GetSSE: TJvSSEVersion;
begin
case Ord(GetCPUInfo.SSE) of
1 : Result := vSSE1;
2 : Result := vSSE2;
3 : Result := vSSE3;
else Result := vNoSSE;
end;
end;
Ale zobaczmy co to jest to GetCPUInfo? To już jest JclSysInfo.pas
procedure GetCpuInfo(var CpuInfo: TCpuInfo);
begin
CpuInfo := CPUID;
...
end;
function CPUID: TCpuInfo;
...
CPUInfo.SSE := [];
if (CPUInfo.Features and SSE_FLAG) <> 0 then
Include(CPUInfo.SSE, sse);
if (CPUInfo.Features and SSE2_FLAG) <> 0 then
Include(CPUInfo.SSE, sse2);
if (CPUInfo.IntelSpecific.ExFeatures and EINTEL_SSE3) <> 0 then
Include(CPUInfo.SSE, sse3);
if (CPUInfo.IntelSpecific.ExFeatures and EINTEL_SSSE3) <> 0 then
Include(CPUInfo.SSE, ssse3);
if (CPUInfo.IntelSpecific.ExFeatures and EINTEL_SSE4_1) <> 0 then
Include(CPUInfo.SSE, sse4A);
if (CPUInfo.IntelSpecific.ExFeatures and EINTEL_SSE4_2) <> 0 then
Include(CPUInfo.SSE, sse4B);
...
tu sobie wkłada jak rozumiem, w [] te SSE...X
False = 0, więc przy jakieś skróconej logice w warunkach kompilacji może być, że kod jest dobry, tylko mnie się coś wydaje.
Czemu się nie chce skompilować? Też chce zostać JEDI ;-)Paweł P. edytował(a) ten post dnia 25.10.08 o godzinie 00:16