Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
|
DLL programmieren
17. Apr 2008, 21:18
Hallo,
ich beschäftige mich gerade mit DLLs. Da ich die Verwendung der ShareMem Unit vermeiden will, übergebe ich die Strings als PChar.
Meine Fragen sind nun:
1. Kann man in den Funktionen trotzdem Strings verwenden? Oder zum Beispiel String Funktionen. IntToStr, ReverseString, ...
2. DecToX und XToDec sollen von einer anderen Software nicht aufgerufen werden können. Reicht es diese nicht in den Exports zu schreiben?
MFG Christian18
Delphi-Quellcode:
library DLLNumberSystems;
uses
SysUtils, Classes, StrUtils, Math;
{$R *.res}
function DecToX(Value: Byte; Basis: Byte) : PChar;
begin
Result:='';
while Value > 0 do
begin
case Value mod Basis of
10 : Result:=PChar(Result + 'A');
11 : Result:=PChar(Result + 'B');
12 : Result:=PChar(Result + 'C');
13 : Result:=PChar(Result + 'D');
14 : Result:=PChar(Result + 'E');
15 : Result:=PChar(Result + 'F');
else Result:=PChar(Result + IntToStr(Value mod Basis));
end;
Value:=Value div Basis;
end;
Result:=PChar(ReverseString(Result));
end;
function XToDec(Value: PChar; Basis: Byte) : Byte;
var i : Integer; // Schleifenvariable
begin
Result:=0;
Value:=PChar(ReverseString(Value));
for i:=1 to Length(Value) do
begin
case Value[i] of
'A' : Result:=Result + Round((10 * Power(Basis, i - 1)));
'B' : Result:=Result + Round((11 * Power(Basis, i - 1)));
'C' : Result:=Result + Round((12 * Power(Basis, i - 1)));
'D' : Result:=Result + Round((13 * Power(Basis, i - 1)));
'E' : Result:=Result + Round((14 * Power(Basis, i - 1)));
'F' : Result:=Result + Round((15 * Power(Basis, i - 1)));
else Result:=Result + Round((StrToInt(Value[i]) * Power(Basis, i - 1)));
end;
end;
end;
function HexToDec(Value: PChar) : PChar;
begin
Result:=PChar(IntToStr(XToDec(Value, 16)));
end;
function HexToOct(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(XToDec(Value, 16), 8));
end;
function HexToBin(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(XToDec(Value, 16), 2));
end;
function DecToHex(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(StrToInt(Value), 16));
end;
function DecToOct(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(StrToInt(Value), 8));
end;
function DecToBin(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(StrToInt(Value), 2));
end;
function OctToHex(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(XToDec(Value, 8), 16));
end;
function OctToDec(Value: PChar) : PChar;
begin
Result:=PChar(IntToStr(XToDec(Value, 8)));
end;
function OctToBin(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(XToDec(Value, 8), 2));
end;
function BinToHex(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(XToDec(Value, 2), 16));
end;
function BinToDec(Value: PChar) : PChar;
begin
Result:=PChar(IntToStr(XToDec(Value, 2)));
end;
function BinToOct(Value: PChar) : PChar;
begin
Result:=PChar(DecToX(XToDec(Value, 2), 8));
end;
exports
HexToDec, HexToOct, HexToBin,
DecToHex, DecToOct, DecToBin,
OctToHex, OctToDec, OctToBin,
BinToHex, BinToDec, BinToOct;
begin
end.
|