Q&A

  • API관련.. 부탁입니다.. 급해요!
IOTIEEEDLL LONG WINAPI OutputX( DevHandleT dh, LPBYTE data, DWORD count, BOOL last, BOOL forceAddress, TermT *term, BOOL async, LPDWORD completStat);



C++로 작성된 dll입니다.



이 함수를 델파이에서 호출해야 되는데...

function OutputX( dh:DevHandleT; var data:charArray; count:dword; last:longbool;

forceAddress:longbool; var term:TermT; async:longbool;

var completStat:dword ):longint;

stdcall; external IEEE_DLL;



이렇게 선언되어 있습니다. (장비구입시 제공되는 DLL이라 수정할 수도 없네요)

문제는 여섯번째 term파라메타가 C++에서는 null이면 디폴트 값을 가지고 가는데..

델파이에서는 null을 넘길 수가 없네요.

(장비 메뉴얼이 없어서 디폴트 값을 알 수가 없네요..

어떤값을 넘겨야 할지 모르겠네요.)



디폴트 이외에는 제대로 실행이 안됩니다.

var term:TermT 로 선언된 매개변수에 어떻게 C에서처럼 null을 넘기죠??



제발~



4  COMMENTS
  • Profile
    innover 2001.12.20 00:00
    다음과 같이 해보세요

    type

    PTerm = ^TermT;



    ...



    OutputX(dh, data, count, last, forceAddress, PTerm(nil)^, async, completStat);





    멍뭉이 wrote:

    > IOTIEEEDLL LONG WINAPI OutputX( DevHandleT dh, LPBYTE data, DWORD count, BOOL last, BOOL forceAddress, TermT *term, BOOL async, LPDWORD completStat);

    >

    > C++로 작성된 dll입니다.

    >

    > 이 함수를 델파이에서 호출해야 되는데...

    > function OutputX( dh:DevHandleT; var data:charArray; count:dword; last:longbool;

    > forceAddress:longbool; var term:TermT; async:longbool;

    > var completStat:dword ):longint;

    > stdcall; external IEEE_DLL;

    >

    > 이렇게 선언되어 있습니다. (장비구입시 제공되는 DLL이라 수정할 수도 없네요)

    > 문제는 여섯번째 term파라메타가 C++에서는 null이면 디폴트 값을 가지고 가는데..

    > 델파이에서는 null을 넘길 수가 없네요.

    > (장비 메뉴얼이 없어서 디폴트 값을 알 수가 없네요..

    > 어떤값을 넘겨야 할지 모르겠네요.)

    >

    > 디폴트 이외에는 제대로 실행이 안됩니다.

    > var term:TermT 로 선언된 매개변수에 어떻게 C에서처럼 null을 넘기죠??

    >

    > 제발~

    >

  • Profile
    leowiz 2001.07.30 11:14
    TermT가 어떤형이죠??? 어떤형인지 알려주셔야지 답변을 해드릴수 있을거 같군요...



    C++선언에서는 포인터 형이군요. 함수내부에서 term이란 포인터변수를 변경하지 않고



    참조만 한다면 굳이 var파라매터를 쓰실 필요는 없을거 같은데...



    type

    PTermT = ^TermT;

    TermT = ...;



    function OutputX( dh:DevHandleT; var data:charArray; count:dword; last:longbool;

    forceAddress:longbool; term: PTermT; async:longbool;

    var completStat:dword ):longint;

    stdcall; external IEEE_DLL;



    OutPutX(..., nil, ...);



    멍뭉이 wrote:

    > IOTIEEEDLL LONG WINAPI OutputX( DevHandleT dh, LPBYTE data, DWORD count, BOOL last, BOOL forceAddress, TermT *term, BOOL async, LPDWORD completStat);

    >

    > C++로 작성된 dll입니다.

    >

    > 이 함수를 델파이에서 호출해야 되는데...

    > function OutputX( dh:DevHandleT; var data:charArray; count:dword; last:longbool;

    > forceAddress:longbool; var term:TermT; async:longbool;

    > var completStat:dword ):longint;

    > stdcall; external IEEE_DLL;

    >

    > 이렇게 선언되어 있습니다. (장비구입시 제공되는 DLL이라 수정할 수도 없네요)

    > 문제는 여섯번째 term파라메타가 C++에서는 null이면 디폴트 값을 가지고 가는데..

    > 델파이에서는 null을 넘길 수가 없네요.

    > (장비 메뉴얼이 없어서 디폴트 값을 알 수가 없네요..

    > 어떤값을 넘겨야 할지 모르겠네요.)

    >

    > 디폴트 이외에는 제대로 실행이 안됩니다.

    > var term:TermT 로 선언된 매개변수에 어떻게 C에서처럼 null을 넘기죠??

    >

    > 제발~

    >

  • Profile
    드기 2001.07.30 16:34
    TermT형식은



    type

    _IOT_TERMT =

    record

    EOI : longbool;

    EightBits : longbool;

    nChar : integer;

    termChar : array[0..1] of Char;

    end;



    type

    TermT = _IOT_TERMT;



    var을 뺀다고 해도 C에서 null에 해당하는 0을 구조체에 할당하거나

    nil 을 넣으면 에러가 발생하던데...



  • Profile
    leowiz 2001.07.30 19:17
    답변을 다시 자세히 봐보세요... var를 빼고 포인터형으로 선언했습니다...



    드기 wrote:

    > TermT형식은

    >

    > type

    > _IOT_TERMT =

    > record

    > EOI : longbool;

    > EightBits : longbool;

    > nChar : integer;

    > termChar : array[0..1] of Char;

    > end;

    >

    > type

    > TermT = _IOT_TERMT;

    >

    > var을 뺀다고 해도 C에서 null에 해당하는 0을 구조체에 할당하거나

    > nil 을 넣으면 에러가 발생하던데...

    >