DLL에 아래와 같은 함수가 있습니다..
function GetCpk10(data: Pointer; std: double): double;
외부 프로그램에서
GetCpk10(data, 18.05);
이렇게 사용하니 DLL 내부의 위 함수내에서 std값을 확인해 보니 쓰레기 값이 들어가더군요...
그런데 함수를 아래처럼 바꾸어 사용하면 제대로 돌아갑니다..
function GetCpk10(std: double; data: Pointer): double;
원인이 뭘까요??
data는 동적배열로 제대로 들어갑니다...
그리고 DLL로 하지 않았을 때는 이상없이 잘 됩니다.
아래와 같이 사용했습니다..
procedure TForm1.Button5Click(Sender: TObject);
var
data: array of double;
tmp: double;
begin
SetLength(data, 10);
data[0] := 18.14;
data[1] := 18.07;
data[2] := 18.16;
data[3] := 17.92;
data[4] := 18.13;
data[5] := 17.94;
data[6] := 18.04;
data[7] := 18.14;
data[8] := 17.89;
data[9] := 18.12;
tmp := GetCpk10(data, 18.50);
ShowMessage('cpk:' + FloatToStr(tmp));
SetLength(data, 0);
end;
-------------------------DLL----------------------------------------
function GetCpk10(data: Pointer; std: double): double;
type
Ptr = array of double;
var
tmp: Ptr;
diff, k: double;
begin
tmp := data;
std := RoundValue(std);
diff := GetAvg(tmp) - std;
if diff < 0 then
diff := -diff;
k := RoundValue(diff/1);
result := RoundValue((1-k)*GetCp10(tmp));
end;
function GetCpk10(data: Pointer; std: double): double; stdcall;
이정근 wrote:
> DLL에 아래와 같은 함수가 있습니다..
>
> function GetCpk10(data: Pointer; std: double): double;
>
> 외부 프로그램에서
> GetCpk10(data, 18.05);
> 이렇게 사용하니 DLL 내부의 위 함수내에서 std값을 확인해 보니 쓰레기 값이 들어가더군요...
>
> 그런데 함수를 아래처럼 바꾸어 사용하면 제대로 돌아갑니다..
> function GetCpk10(std: double; data: Pointer): double;
> 원인이 뭘까요??
>
>
> data는 동적배열로 제대로 들어갑니다...
> 그리고 DLL로 하지 않았을 때는 이상없이 잘 됩니다.
>
>
> 아래와 같이 사용했습니다..
>
> procedure TForm1.Button5Click(Sender: TObject);
> var
> data: array of double;
> tmp: double;
> begin
> SetLength(data, 10);
> data[0] := 18.14;
> data[1] := 18.07;
> data[2] := 18.16;
> data[3] := 17.92;
> data[4] := 18.13;
> data[5] := 17.94;
> data[6] := 18.04;
> data[7] := 18.14;
> data[8] := 17.89;
> data[9] := 18.12;
>
>
> tmp := GetCpk10(data, 18.50);
> ShowMessage('cpk:' + FloatToStr(tmp));
>
> SetLength(data, 0);
> end;
>
>
> -------------------------DLL----------------------------------------
> function GetCpk10(data: Pointer; std: double): double;
> type
> Ptr = array of double;
> var
> tmp: Ptr;
> diff, k: double;
> begin
> tmp := data;
> std := RoundValue(std);
> diff := GetAvg(tmp) - std;
> if diff < 0 then
> diff := -diff;
>
> k := RoundValue(diff/1);
> result := RoundValue((1-k)*GetCp10(tmp));
> end;
>