|
FP_SEG,FP_OFF 가 매크로 인데요.도스니까 dos.h 에 있을라나..?
그거 풀어 쓰면 될거 같은데요...(함수에 대입,컴파일하는게 문제라면요)
아마
FP_SEG 는 65536 로 나눈값
FP_OFF 는 63336 로 나눈 나머지값 일거라로 예상은 합니다만...
p3 = iptr / 65536;
p4 = iptr % 65536;
로 한번해 보시던가요..
이윤성 님이 쓰신 글 :
: 조언 감사 드립니다. 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);
: : : }
|