Q&A

  • DLL파일에서 에러 원인 갈켜주세요.
아래의 소스는 일반 Unit에서는 잘 동작을 합니다.
이걸 DLL로 만드니 에러가 발생하는데
메시지는 invalid pointer operation 입니다.
군데군데 메시지를 출력해보니
if lbl_Str.Canvas.Pixels[(iStep*8)+j-1,i-1] = clBlack then begin
부분에서 에러가 발생하는 것 같은데
Unit에서는 잘되는것이 왜 에러가 생기는지 알 수 가 없네요....

Function MakeHangul(sHanStr,sFontName:string; iX, iY, iSize, iType : integer) : String;
var
    iWidth, iHeight : integer;
    i,j,w,a,iStep,iPos : integer;
    sData,Str: string;
    Form1 : TForm;
    lbl_Str : TLabel;
begin
    Form1 := TForm.Create(Application);
    lbl_Str := TLabel.Create(Form1);

    if sHanStr = '' then exit;
    lbl_Str.Font.Name := sFontName;
    lbl_Str.Font.Size := iSize;
    lbl_Str.Font.Color := clBlack;

    if iType = 1 then
        lbl_Str.Font.Style := [fsBold]
    else
        lbl_Str.Font.Style := [];


    iWidth  := lbl_Str.Width;
    iHeight := lbl_Str.Height;

    iStep := 0;
    iPos :=  0;

    while iWidth > 0 do
    begin
        if (iWidth - 8) > 0 then  begin
            w := 8;
            iWidth := iWidth - 8;
        end else begin
            w := iWidth;
            iWidth := 0;
        end;

        sData := '';

        for i := 1 to iHeight do begin
            a := $00;
            for j := 1 to w do begin
                if lbl_Str.Canvas.Pixels[(iStep*8)+j-1,i-1] = clBlack then begin
                    case j of
                      1 : a := a OR $80;
                      2 : a := a OR $40;
                      3 : a := a OR $20;
                      4 : a := a OR $10;
                      5 : a := a OR $08;
                      6 : a := a OR $04;
                      7 : a := a OR $02;
                      8 : a := a OR $01;
                    end;
                end;
            end;
            sData := sData + IntToHex(a,2);
        end;

        Str := str + '~DGimg'+IntToStr(iImgCount)+','+IntToStr(iHeight)+',1,'+sData;
        Str := str + '^FO'+IntToStr(iPos+iX)+','+IntToStr(iY);
        Str := str + '^XGimg'+IntToStr(iImgCount)+',1,1^FS';
        inc(iStep);
        iPos := iPos + 8;
        inc(iImgCount);
    end;
    Result := str;
    Form1.Free;
    lbl_str.Free;
end;

Exports
   MakeHangul;
1  COMMENTS
  • Profile
    신강섭 2002.12.21 00:46
    저도 옛날에 이거 때문에 많이 고생을 했는데
    DLL파일에서는 string 변수를 쓰면 에러가 납니다.

    "To avoid using BORLNDMM.DLL, pass string information
      using PChar or ShortString parameters"

    DLL파일을 만들었을때 맨위에 주석처리로 써지는 부분인데요
    스트링 정보를 전달하려면 Pchar 나 ShortString으로 사용하라고
    나오네요

    바꿔서 사용하세요