Q&A

  • ASP UPLOAD 컴포넌트?(화랑님)
제가 화랑님이 주신 내용을 보고

제가 뽑아낼려는 bite배열에 시작번지값과 마지막 번지값을 알아냈습니다.

그래서

포인터를 그 시작 번지와 마지막 번지사이를 움직여 가며 값을 얻어

올려구 하는데.

binary 형을 bitearrary에 집어넣어놔도 결국은 받아낼때는

string에 집어넣어서 리턴을 해주어야 하는데..

아래 함수는

binary형데이타를 pbitearray에 집어넣고 bite단위로 원하는 문자를 검색해서

원하는 문자의 시작 포인터(배열번지) 을 알아내고 마지막포인터(배열번지)을 알아

내서 그갑을 가지고 루프를 돌면서 그값을 string형에 넣는 것인데 ..

뭐가 잘못 된건가요..



function TFileUpLoad.GetValueByName(InputName: OleVariant): OleVariant;

var

buf : pointer;

bCheck,sCheck : Boolean;

i,j,k,s : integer;

VInputName: String;

first : integer;

second : integer;

BaseString : String;

// lastchr: array of char;

begin

bCheck := False;

sCheck := False;

buf := Pchar(gpDataArray);

VInputName:=InputName;

first:=0;

second:=0;



for i:=0 to (fTotalBytes-2) do

Begin

bCheck := CompareMem(buf,pChar(VInputName),Length(VInputName));

if bCheck then

begin



for k:=i to (fTotalBytes-2) do

begin

sCheck:=CompareMem(buf,pChar(#13#10#13#10),Length(#13#10#13#10));

if sCheck then

begin

first:=integer(buf)+2;

Break;

end

else

inc(integer(buf));

end;//for

for j:=k to (fTotalBytes-1) do

begin

sCheck:=CompareMem(buf,pChar(VarToStr(FBoundary)),Length(FBoundary));

if sCheck then

begin

second :=integer(buf)-2;

Break;

end

else

inc(integer(buf));

end;//for



Break;

end

Else

inc(integer(buf));

End;// for



i:=0;



if first<>0 then

begin

integer(buf):=first;

For s:=first to second do

begin

if integer(buf)=second then

Exit;



BaseString[i]:=char(buf);

Inc(integer(buf));

i:=i+1;

end;

end;



Result:=BaseString;

end;



이런식으로 basestrig이라는 곳에 담아서 리턴을 하는

코드 build하는데는 문제가 없는데..

막상 asp에서 이함수를 호출하면 치명적 오류가 생긴다고 나오네요..

제가 코드상에 뭐가 잘못
1  COMMENTS
  • Profile
    화랑 2000.06.13 01:26
    제가 말씀드릴데로.. 일단 처음과 끝 포인트를 아셨다면..

    Copymemory를 쓰시면 간단히 가져오는데요..



    CopyMemory는 API입니다.



    VOID CopyMemory (



    PVOID Destination, // address of copy destination

    CONST VOID *Source, // address of block to copy

    DWORD Length // size, in bytes, of block to copy

    );



    3개의 인자가 있는데.. 처음의 Destination이 저장할 공간입니다..



    이것을 보면 address라고 되어 있지요.. 그러니깐 포인터로 저장을 하셔야 합니다.



    *Source부분은 Copy할 포인터 Length는 당연 길이가 되겠죠..



    님께서 사용하신 코드를 보면 integer에서 다시 char로 변환하는등의 루틴이 보이는데



    제가 보기에는 좀 어렵네요.. 그렇게 루프를 돌리시면.. 속도도 느려지니깐



    포인터를 사용해서.. Copy 하시기 바랍니다.



    이곤섭 wrote:

    > 제가 화랑님이 주신 내용을 보고

    > 제가 뽑아낼려는 bite배열에 시작번지값과 마지막 번지값을 알아냈습니다.

    > 그래서

    > 포인터를 그 시작 번지와 마지막 번지사이를 움직여 가며 값을 얻어

    > 올려구 하는데.

    > binary 형을 bitearrary에 집어넣어놔도 결국은 받아낼때는

    > string에 집어넣어서 리턴을 해주어야 하는데..

    > 아래 함수는

    > binary형데이타를 pbitearray에 집어넣고 bite단위로 원하는 문자를 검색해서

    > 원하는 문자의 시작 포인터(배열번지) 을 알아내고 마지막포인터(배열번지)을 알아

    > 내서 그갑을 가지고 루프를 돌면서 그값을 string형에 넣는 것인데 ..

    > 뭐가 잘못 된건가요..

    >

    > function TFileUpLoad.GetValueByName(InputName: OleVariant): OleVariant;

    > var

    > buf : pointer;

    > bCheck,sCheck : Boolean;

    > i,j,k,s : integer;

    > VInputName: String;

    > first : integer;

    > second : integer;

    > BaseString : String;

    > // lastchr: array of char;

    > begin

    > bCheck := False;

    > sCheck := False;

    > buf := Pchar(gpDataArray);

    > VInputName:=InputName;

    > first:=0;

    > second:=0;

    >

    > for i:=0 to (fTotalBytes-2) do

    > Begin

    > bCheck := CompareMem(buf,pChar(VInputName),Length(VInputName));

    > if bCheck then

    > begin

    >

    > for k:=i to (fTotalBytes-2) do

    > begin

    > sCheck:=CompareMem(buf,pChar(#13#10#13#10),Length(#13#10#13#10));

    > if sCheck then

    > begin

    > first:=integer(buf)+2;

    > Break;

    > end

    > else

    > inc(integer(buf));

    > end;//for

    > for j:=k to (fTotalBytes-1) do

    > begin

    > sCheck:=CompareMem(buf,pChar(VarToStr(FBoundary)),Length(FBoundary));

    > if sCheck then

    > begin

    > second :=integer(buf)-2;

    > Break;

    > end

    > else

    > inc(integer(buf));

    > end;//for

    >

    > Break;

    > end

    > Else

    > inc(integer(buf));

    > End;// for

    >

    > i:=0;

    >

    > if first<>0 then

    > begin

    > integer(buf):=first;

    > For s:=first to second do

    > begin

    > if integer(buf)=second then

    > Exit;

    >

    > BaseString[i]:=char(buf);

    > Inc(integer(buf));

    > i:=i+1;

    > end;

    > end;

    >

    > Result:=BaseString;

    > end;

    >

    > 이런식으로 basestrig이라는 곳에 담아서 리턴을 하는

    > 코드 build하는데는 문제가 없는데..

    > 막상 asp에서 이함수를 호출하면 치명적 오류가 생긴다고 나오네요..

    > 제가 코드상에 뭐가 잘못