Q&A

  • dll 로 제공된 com object의 event 를 사용하려면?b
dll 로  제공된 com 를 사용하는 작업중인데 문제가 좀 있습니다.

dll 에서 해당  TLB.pas 를 추출한 후 아래의 code 를 제 project 에 추가 했습니다.
public 에 추가된 변수 및 FormShow 에 추가된 code 들은 TLB.pas 를 근거로 했으며 실행시
별문제가 발생하지  않았습니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,  TIBRVCOMLib_TLB;

  //TIBRVCOMLib_TLB 은 추가된 unit

type
  TForm1 = class(TForm)
    Button1: TButton;
    edSubject: TEdit;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
     // COM object 를 위한 var..
     Tibrv: ITibrv;
     TibrvQueue:     ITibrvQueue;
     Tibrvtransport: ITibrvTransport ;
     Tibrvqueuegroup : ITibrvQueueGroup ;
     Tibrvlistener : ITibrvListener;
     DisplayCount : Integer;
  end;

//
procedure TForm1.FormShow(Sender: TObject);
begin
    Tibrv := CoTibrv.Create;
    Tibrv.open;
    TibrvQueue := Tibrv.getDefaultQueue;
    Tibrvqueuegroup := Tibrv.getAutoDispatchQueueGroup;
    TibrvTransport := CoTibrvTransport.Create;
    TibrvTransport.Create('','','');

end;



procedure TForm1.Button1Click(Sender: TObject);
begin
    TibrvListener :=  CoTibrvListener.create;
    Tibrvqueuegroup.add(TibrvQueue);
    TibrvListener.create(TibrvQueue, TibrvTransport,EdSubject.Text, 0 )
    TibrvListener

end;

그런데 이 com object 는 TibrvListener 에서 OnMsg 라는 event 발생할수 있도록 되어 있는데
TLB.pas 에는 다음과 같이 정의 되어 있습니다. 아마 아래의 event 를 TibrvListener 에 연결해야 할것
같습니다.

  _ITibrvListenerEvents = dispinterface
    ['{72E9784A-355C-11D3-86AC-00105A07602D}']
    procedure onMsg(const listener: ITibrvListener; const message: ITibrvMsg); dispid 1;
  end;

이 procedure 에 event가 올경우 실행 되도록 하고 싶은데 연결하는 방법을 모르 겠습니다..

참고로 VB sample source 에서는 다음과 같이 되어 있습니다.

Private Sub listener_onMsg(ByVal listener As TIBRVCOMLib.ITibrvListener,
                              _ByVal message As TIBRVCOMLib.ITibrvMsg)

com 과 delphi 의 연결을 잘아시는 분 계시면 idea 좀 주세요

그럼 20000
0  COMMENTS
    • 장지용
      2002.02.06 22:59
      function DayOfWeek(Date: TDateTime): Integer; 일요일 = 1 월요일 = 2 . . .
    • 푸른하늘
      2002.02.07 23:37
      먼저 답변에 감사드립니다. ^^ 근데..DayOfWeek를 어떻게 사용하는가요? --; 이 함수를 이용해 월요일일...
    • 장지용
      2002.02.19 00:30
        case DayOfWeek(Now) of     1 : ShowMessage('일요일입니다.'); &nb...
    • 장명선
      2002.02.06 21:19
      DB의 날짜 및 요일을 가져오면 쉽게 해결할수 있을겁니다. 꼭 DB만이 아니고 시스템 요일을 가져와도 되겠...
    • 장지용
      2002.02.06 21:14
      "Query1.Next;" 로 바꾸면 안 되나요?
    • 장명선
      2002.02.06 21:07
      Next를 쓸때.....Query1.Next로 써보세요 제가 보기엔 그것이 문제인듯 싶네요 즐코하세요~~~
    • 강두헌
      2002.02.06 21:03
      이름이 좀 헷갈려서 정확한건지는 모르겠지만, Next; 를 Query1.Next; 로 바꾸시면 될거 같네요.. 도...
    • ssoya
    • 2002.02.06 20:47
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 보들레르
      2002.02.06 23:00
      님의 코드를 한글로 쓰면 이렇게 됩니다. if 조건 then //만약에 조건이맞으면 처리 else if 조건 then...
    • 강두헌
      2002.02.06 20:57
      먼저 조건에 맞는 경우를 실행하고 빠져 나갑니다. 이건 서점가서 아무 기본서적 꺼내들고 10분만 읽으면 ...
    • 김종석
    • 2002.02.06 20:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.02.06 22:15
      안녕하세요. 최용일입니다. test가 MSG의 포인터네요... 그냥 형변환하세요... VC++ 처럼... var &n...
    • 이규황
    • 2002.02.06 20:34
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 장명선
      2002.02.06 21:03
    • Tk
      2002.02.06 21:10
    • 이규황
      2002.02.06 21:09
    • 장지용
      2002.02.06 21:21
    • 장명선
      2002.02.06 21:23
    • 장지용
      2002.02.06 22:19
    • 이규황
      2002.02.06 21:29
    • 양충규
    • 2002.02.06 20:21
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김정은
    • 2002.02.06 20:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2002.02.15 02:01
      답변이 될런지 모르겠지만, 일반적으로 SMTP 서버를 공개해 놓지 않습니다. 스패머의 좋은 표적이 때문입...
    • 신호
    • 2002.02.06 18:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.02.06 22:25
      안녕하세요. 최용일입니다. 그렇게 하실려면 그릴려구 하는 것들 모두를 다 객체화 해서 만드셔야 합니...
    • 서정길
      2002.02.06 18:47
      쩝... SQL.Add('values (:Tbl_PcName,:Tbl_UserName,:Tbl_LoginName,:Tbl_WorkGroup,:Tbl_MyIPAdress, '...
    • 조규춘
      2002.02.06 20:31
      찾으시는 답변이 되었으면 좋겠네요.. var   i, n: Integer;   fn: file; &...
    • 임광운
      2002.02.06 22:20
      답변 정말 감사드립니다. 어여 공부해서^^ 저도 다른분들과 많이 나누고 싶네요. 그럼 좋은 하루 되세요....
    • 이화
    • 2002.02.06 09:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2002.02.06 22:19
      아래에 답변해드렸는데......
    • 조성택
    • 2002.02.06 09:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김용덕
      2002.02.06 19:34
      안녕하세염~ 차이점은 바로 실행하는 주최죠~ Thread의 Execute에서 MyFunc를 호출하면 해당 Thread에...
    • 임현창
      2002.02.06 08:31
      QuickRep1.ShowProgress := False; 쩝...
    • 고예형
    • 2002.02.06 05:25
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 성더기
      2002.02.06 05:51
      Rowselect 옵션에 체크해두심 안되나여? 질문 내용이 이게 아닌가?..후다닥..=3=3
    • 정계훈
      2002.02.06 05:51
      안녕하세요. 아래와 같이 하심 선택된 ROW의 색깔을 바꿀수 있습니다. 그럼 즐거운 코딩이 되시길... ...
    • gudwhrla
      2002.02.06 05:35
      큰 데이타를 저장시에는 바운드를 사용하셔야 합니다. (:code, :vtext) Sql.add()에 직접 널수 있는 데이...
    • 성더기
      2002.02.06 05:50
      지송스럽게두 저장시에는 아무 문제가 없었슴다.. 데이터는 똑바로 저장이 되더군요.. 단지 쿼리를 날려...
    • gudwhrla
      2002.02.06 07:19
      로드시에 데이타를 변형해서  불러오니까  다 가져 오내여 select code , Convert...
    • 성더기
      2002.02.07 20:20
      그런 방법이 있었군요... 전 걍 타입을 몽땅 Text로 바꿨습니다. text로 사용을 하니깐 문제가 없더군욤....
    • 장지용
      2002.02.06 03:52
      "FindComponent" 라는 놈을 쓰면 될것 같습니다. for intLoop := 1 to 10 do   ...
    • 최용일
      2002.02.06 03:49
      안녕하세요. 최용일입니다. FindComponent메소드나 Controls배열을 이용하세요... procedure TForm1....
    • 장명선
      2002.02.06 02:55
      TLabel(Sender).Caption := '111' 이런씩으로 하면 값이 들어갑니다. 여러개를 동시에 하는것은 조금 ...
    • 이화
    • 2002.02.06 02:43
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 최영근
      2002.02.06 05:39
      Locate 명령도 괜찮습니다. Query1.locate('FieldName', 필드값, [loPartialKey]); //  ('키...
    • 이화
      2002.02.06 08:49
      답글 감사 합니다.. 앞으로 많은 조언 부탁 드릴께요... ㅋㅋㅋ
    • 장지용
      2002.02.06 03:28
      MoveBy : function(Distance: Integer): Integer; 이걸 사용하심 안 될까요.
    • 이화
      2002.02.06 08:51
      델파이를 공부 하고 있는데.. 아래와 같은 컴포넌트 레퍼런스 가이드 없나요.. 제가 보기에 시중에 ...
    • 최용일
      2002.02.06 10:02
      안녕하세요. 최용일입니다. 17000개 정도면 리스트뷰에 그릴때 락을 건다고 해도 데이터를 리스트뷰에 ...
    • gudwhrla
      2002.02.06 02:35
      Name := Listview1.Items[0].SubItems[0]; Age :=Listview1.Items[0].SubItems[1];
    • 김진선
    • 2002.02.06 02:21
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2002.02.06 15:31
      아래와 같은 방법으로 하셔도 될거 같군요.. function SearchAndReplace(sSrc, sLookFor, sReplac...
    • 장명선
      2002.02.06 02:33
      번거러워도 숫자로 변환하여 하시는게 좋을듯 싶네요