Q&A

  • 콜백함수입니다... 문제를모르겠어요... ㅠ.ㅠ
안녕하세요 델파이를 하다가 궁금한게 있어서요..
아무리 뒤져보고 그래도 어떻게 해야할지 모르겠어여.. ㅠ.ㅠ
초,중,고수님들... 부탁 드립니다.

다른 업체에서 콜백함수를 이렇게 만든다는데요.
----------------------------------------------------------
생성할 function
{define-proc public {proc-callback str:String, num:int}:String
public {proc-callback str:String, num:int}:String
----------------------------------------------------------

저희쪽에서 함수를 만들때 이렇게 만들어놨는데요.
dll.pas ----------------------------------------------------------
type
  TCallBack =function (str:String; num:Integer): Integer; cdecl;
var
  CallBack : TCallBack = nil;

Function Check(Filename : PChar; CallBack : TCallBack) : Integer; Export;
var
    iFile : Integer;  
begin
    iFile := 1;
    ShowMessage('AAA');
    result := iFile;
end;
----------------------------------------------------------
이렇게 했는데요..
저기서 넘어오는 파라메터는
Check('C:\AAA', ????)
이렇게 넘어오는데요 물음표 있는데가 콜백함수 들어가는곳이구요


이제부터 질문 드릴께요... ^^;

제가 콜백함수에 정의는 게시판같은거 봐서 대충 알겠는데

in, out 이 어떻게 이뤄지는지 그걸 잘 모르겠어요..

콜백함수와 파라메터를 업체에 받아서 제가 만드는 dll을 실행시키면
그 dll에서 콜백함수를 제가 함수를 만들어서 실행을 시켜서 다시 뿌려주는건가요?

또하나.. 저걸 델파이로 콜백 테스트를 하려고 하는데요..
testform.pas-----------------------------------------------------------------------------------
type
    TCallBack = function (str:String; num:Integer): String; stdcall;
var
        Call_Back : TCallBack;
  Function Check(Filename : String; call_back : TCallBack) : Integer; external 'JavaParsingDLL.dll';

procedure TForm1.Button2Click(Sender: TObject);
begin
    Check2('AAAA',call_back('1',1));
end;
----------------------------------------------------------------------------------
이렇게 폼 하나 만들어서 짯는데...
일단 call_back에서 에러가
Incompatible type: 'TCallBack' and 'String'
이런식으로 나오는데요..
저런식으로 dll 과 testform을 하면되는건가요?
도와주세요.... ㅠ.ㅠ
콜백만 삼일째 보고있어요.. ㅠ.ㅠ
1  COMMENTS
  • Profile
    최용일 2010.02.26 05:59
    콜백은 자신이 아니라 호출한 함수내에서 실행시켜주는것입니다.
    위의 예를 보면 JavaParsingDLL.dll에 있는 Check함수를 호출하면 Check함수에서 call_back 파라매터로 넘어온 콜백함수주소를 이용해서 실행시키는것이죠.
    때문에 DLL의 Check함수를 호출할때는 그냥 콜백함수의 주소를 넘겨주시면 됩니다.
    Check('AAAA', @call_back);

    DLL이 자바인것같은데... 델파이의 String형하고 호환되는 데이터형이 없을건데요... 아마도 PChar형으로 해야 할것입니다.

    아래는 예제입니다.

    type
    TCallBackFunc = function (No: Integer): Integer;

    function CallBackImpl(No: Integer): Integer;
    // Callback함수, 구현해야합니다.
    begin
    Result := No *100;
    end;

    function ExecCallBack(No: Integer; CallBack: TCallBackFunc): Integer;
    // 질문에서 'JavaParsingDLL.dll'에 있는 Check함수와 똑같은 역활을 하는 함수죠...
    begin
    Result := CallBack(No);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage( IntToStr( ExecCallBack(10, @CallBackImpl) ));
    end;


    • 델초
      2010.03.12 02:04
      공지사항에 "원격 디버깅 서비스를 실시 합니다." 라는 내용이 있습니다. 실제로 운영되는지는 모르...
    • 땅콩맨
      2010.03.17 09:35
      경환님 설치가 다 되셨는지 궁금하네요... ^^
    • phono
      2010.03.10 06:11
      주소록 wab 파일 제어와 관련한 소스는 좀 돌아나니는 걸로 알고 있습니다. wab 라는 검색어로 검색을...
    • 땅콩맨
      2010.03.17 09:47
      저도 잠깐 자료를 찾아보았지만 검색이 안되는군요. 좀 시간을두고 찾아보거나 관련자료가 안나오면 유...
    • 서선영
    • 2010.03.08 20:37
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 양용민
    • 2010.03.09 01:57
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 서선영
      2010.03.11 01:49
      "모두" 탭에서 입력하여 연결 했습니다^^ 도움 감사합니다^^
    • 땅콩맨
      2010.03.22 10:45
      다른방법으로는 Jet OLEDB:System database = mdw 파일 경로를 넣어주는 방법이 있습니다. mdw파일은 ...
    • 김태진
      2010.11.24 23:25
      저도 궁금하던 내용인데 답글 달아주신분들 감사합니다.
    • 조덕희
    • 2010.03.07 21:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.03.10 22:09
      델파이 옵션의 Palette페이지에서 옮기시면 됩니다. 언인스톨도 마찬가지로 옵션에서...
    • 땅콩맨
      2010.03.22 10:47
      컴포넌트 팔렛트의 Properties에 들어가셔서 옮기려는 컴포넌트에 드래그&드랍을 하셔서 옮기는 방법도 ...
    • 땅콩맨
      2010.03.22 10:52
      active-x 컴포넌트의 이름이 길경우 그럴수도 있다는데 컴포넌트 이름의 길이를 좀 줄여보시는게 어떠실지?
    • 오병주
      2010.03.05 20:17
      메일로 답변드렸어요 수고하세요..^^ 건승하세요
    • 초보임당
      2010.03.16 22:59
      SAP 버전마다 틀린걸로 알고 있는데요... SAP설치하면 OCX 가 포함되어 있던데요..
    • 땅콩맨
      2010.03.22 11:00
      탐크루즈님, 나중에 기회되면 저도 보내주시길 부탁르여용~^^
    • 엄마미안
      2010.03.05 19:28
      예전에 SAP동호회에서 다른 랭귀지로 만들어서 SAP로 데이터를 넘긴다는 글을 본적 있는거 같습니다. 여...
    • 엄마미안
      2010.03.05 19:35
      오래된 자료같지만 여길 보시고요. https://forums.sdn.sap.com/message.jspa?messageID=350879 삽...
    • 초보임당
      2010.03.16 22:57
      가능 합니다. 역시 SAP RFC FUNCTION 쓰시면 되는데 ..당연하겠지만 SAP 쪽은 BAPI 개발자가 같이 개발...
    • 이용벽
    • 2010.03.04 21:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2010.03.04 22:45
      데이터베이스의 종류와 특정 쿼리문을...
    • 이용벽
      2010.03.05 00:52
      이런 저런 시도 끝에 답을 얻었습니다. COMMENT field 가 MEMO type이었는데 이를 C type로 바꾸니까 에...
    • 이규하
      2010.03.04 18:19
      델파이 안에서 하실께 아니라면 .. 윈도우 무비 메이커를 써보시지요 ... 그림 주욱 붙여서 ... AVI ...
    • 박상윤
      2010.03.08 23:09
      AVI 관련 라이브러리 사용하면 프로그램에 직접 가능 합니다. 단 모든 이미지 크기가 (가로세로)같아야...
    • 이현영
    • 2010.03.03 21:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.03.04 08:51
      function vdmtAuthenticate(Encode_Service_Name: PChar; Encode_App_Name: PChar): Boolean; stdcall...
    • 홍길동
    • 2010.03.02 06:43
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 오선진
    • 2010.02.26 19:10
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 박철수
      2010.02.26 19:36
      var는 아마 function AA내부에서 weight변수의 내용을 읽기만 하는 것이 아니라 쓸수도 있는 걸로 알고 ...
    • 홍성락
      2010.02.26 19:36
      함수 인자중 var선언은 in/out을 하겠다는건데요(값을 넘겨주고 또, 받을수 있다는겁니다), 그래서 사용...
    • 소나기
      2010.02.26 19:42
      위 함수는 아마도 weight 라는 변수가 이미 선언되어 있고 함수를 수행한 후에 그 결과가 var 변수에 ...
    • phono
      2010.02.26 19:57
      var 로 선언된 argument는 Call By Reference로 처리 하겠다고 컴파일러에게 선언해주는 것 입니다. ...
    • 오선진
      2010.02.26 21:28
      답변감사합니다. 위 델파이 DLL의 함수를 C++에서 사용하려고 하는데, 세번째 인자 [var weight:i...
    • cdrd
    • 2010.02.26 03:09
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.03.03 11:50
      뭐든 별 상관없습니다. 델파이2010은 32비트컴파일러입니다. 64비트 윈도우7에서 컴파일한다고 해도 32...
    • cdrd
      2010.03.11 19:42
      최용일님 감사합니다.
    • 박준영
    • 2010.02.26 02:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • phono
      2010.02.26 05:42
      MS-SQL서버의 로그라는게 한게가 있어서.., 추적하긴 힘들겁니다. 거기다 대부분 MS-SQL서버에 접속...
    • 박준영
      2010.02.26 18:18
      답변 감사합니다. 한번 고려해 봐야 겠네요.. ㅋㅋ 그럼 수고 하세요~~!!
    • 최용일
      2010.02.26 06:26
      VB에서 LONG은 64비트정수입니다. 델파이에서 Int64형과 호환되죠. procedure UniDecoder(var pSrc: I...
    • 오선진
    • 2010.02.25 03:28
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.02.26 06:29
      쩝~ 세번째 파라매터가 무엇을 뜻하는지는 함수 만든 사람외에는 알 수 없습니다. 함수만드신 분에게 물...
    • 오선진
      2010.02.26 19:08
      질문이 잘못 됐군요.. 세번째 파라미터가 var weight:int64 로 선언되어 있는데, var가 뜻하는 바를 모...
    • 임대순
      2010.02.26 18:45
      자답입니다. 휴..해결했네요..그냥 하드코딩으로 스캐너에서 다시 한번 입력하게 끔 만들어 줄을 자동...
    • 치꼬
      2010.02.24 22:25
      DevExpress 게시판에 답변 올려
    • 김경표
    • 2010.02.23 23:58
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2010.02.26 05:59
      콜백은 자신이 아니라 호출한 함수내에서 실행시켜주는것입니다. 위의 예를 보면 JavaParsingDLL.dll에 ...