|
조언 감사 드립니다. far 포인터는 지우면 되는데...
여기서 인자값을 받는게 있어서 문제가 생기고 있습니다.
int OurDonglePresent (void)
{
int far *iptr = (int far *) DongleByte;
p1 = 0; // Start Addr
p2 = 56; // Block Length (in Words)
//
p3 = FP_SEG (iptr); // Buffer Segment
p4 = FP_OFF (iptr); // Buffer Offset
offset1_1 = uVal1_1;
offset1_2 = uVal1_2;
offset2_1 = uVal2_1;
offset2_2 = uVal2_2;
hasp (GET_HASP_STATUS, SeedCode, LptNum,
GetPass1 (), GetPass2 (), &p1, &p2, &p3, &p4);
return (p1 == 1) && (p2 == 1) && (p3 == 1);
}
이분분에..되있어서요...
저기 p3 랑 p4 에 어떤 값을 넣을지 모르겠더군요..
hasp 란 함수는 라이브러리로 되어 있는거 같은데..
far hasp (int,int,int,int,int,int far *,int far *,int far *,int far *);
이런 인자들이 들어 가는거 같더군요... 물론 저기 far 부분은 삭제 해도 되지만....
해당 여기에 무엇을 넣을지 고민됩니다.
황경록 님이 쓰신 글 :
: -.0
:
: 32bit 프로그래밍에서는 far 포인터는 의미가 없습니다.
: 모든 포인터가 32bit 형이기 때문이죠.
:
: 참고적으로 far 포인터는 16 비트 세크먼그 먼트 주소 + 16 비트 옵셋으로 구성되는데
:
: 이를 염두하여 컨버팅 하시면 되겠습니다.
:
: 어떤 부분인지 모르겠지만... 그냥 무시하시면 되겠습니다.
:
: 이윤성 님이 쓰신 글 :
: : 우연히 도스용 프로그램을 윈도우용으로 바꾸게 되었는데..
: : FP_SEG ,FP_OFF 이거 변환 부분에서 막히네요..
: : 이걸 윈도우용으로 바꿀려면 어떻게 바꾸어야 할지 조언 부탁 드립니다.
: :
: :
: : FP_SEG() 에 대해서 찾아 보았습니다.
: :
: : FP_SEG() Get or Set Segment Portion of a Far Pointer (Macro)
: :
: : #include <dos.h>
: :
: : unsigned FP_SEG(longptr);
: : void far *longptr; Long pointer to memory address
: :
: : FP_SEG() gets or sets the segment portion of the far pointer
: : 'longptr'.
: :
: : Returns: An unsigned integer representing a segment address.
: :
: : Notes: FP_SEG() is a macro.
: :
: : Portability: MS-DOS only.
: :
: : -------------------------------- Example ---------------------------------
: :
: : The following example gets the segment and offset portion of a far
: : pointer and increments the offset by one.
: :
: : #include <dos.h>
: :
: : char far *ptr;
: : unsigned int seg_val, off_val;
: :
: : main()
: : {
: : seg_val = FP_SEG(ptr);
: : off_val = FP_OFF(ptr);
: : FP_OFF(ptr) = ++off_val;
: : printf("%04x:%04x",seg_val,off_val);
: : }
|