Q&A

  • DLL에 있는 함수를 선언할때.
안녕하세요..

보통은 그런식으로 개발 안한다고 다들 말씀하시는데요,
아무리 생각해도 일반적으로 만들면 불편한게 많아서 혹시나 하는 생각에 이렇게 질문 드립니다. ㅜㅠ

사이트마다 내용은 같지만 각기 다른 양식으로 출력을 해야하는 문서가 있거든요.
퀵레포트로 폼을 만들었는데 사이트가 추가될 때마다
소스에 추가하자니 프로그램 덩치도 계속 커지고
한 사이트가 추가될 때마다 다른 모든 사이트도 업데이트 해줘야 하는 불편함이 생기더라구요.
그래서 생각한게 폼마다 dll로 만들어서 사이트마다 필요한 dll파일만 주면
프로그램 크기도 안커지고 업데이트도 쉬워지겠다 생각했죠.
그런데 그렇게 하자니 ,

1. dll마다 함수명을 다르게 하면 어차피 프로그램에서 조건에 따라 어떤 함수를 호출할 것인지 정해주어야 한다.
    --> 그러면 사이트마다 필요없는 dll파일도 모두 가지고 있어야 하지요.
          프로그램도 업데이트 해줘야 하는것은 똑같고요.

2. 그러면, dll마다 함수명을 같게 하면??? 어떤 dll 파일에서 가져오는것인지 파일명이 그때그때 틀려지는데 함수선언을 어떻게 하나요?

생각의 출발부터 잘못된것인지는 잘 모르겠는데요,,
가능하다면 2번으로 하면 간단해지지 않을까 하는데..
좋은 생각 있으신 분, 알려주세요.
고맙습니다... ^^
5  COMMENTS
  • Profile
    한원희 2003.02.06 07:26
    안녕하세요. 한원희입니다.

    동일한 함수로 정의하고, 각 DLL을 어떻게 사이트별로 구별하느냐가 문제군요..
    음... 각 DLL 마다 자신의 정보를 알려주는 함수를 동일한 이름으로 추가해 놓고, 새로 추가되는 DLL에 대해서는 추가한 함수를 이용해서 정보를 읽어서 어느 사이트인지 구별할 수 있지 않을까요?
    또는 함수로 만드는 것이 좀 그렇다면, 각 DLL마다 동일한 형태로 리소스를 추가해 주는 겁니다. 사이트 이름, 버전 번호 등을 리소스로 추가해 놓고, 위 함수와 비슷하게, 각 DLL의 리소스를 읽어서 구별을 하는 것이지요...

    그럼, 즐푸~

  • Profile
    또치 2003.02.06 20:06
    답변 고맙습니다. ^^

    근데여.....

    각 DLL 마다 자신의 정보를 알려주는 함수를 동일한 이름으로 추가해 놓고, 새로 추가되는 DLL에 대해서는 추가한 함수를 이용해서 정보를 읽어서 어느 사이트인지 구별할 수 있지 않을까요?  <-- 무슨 뜻인지 잘 모르겠어요.. ㅠ.ㅠ

    DLL을 각각 만든다면 그 파일명은 어느 사이트꺼인건지 등은 미리 알고 있는거구요,

    프로그램 실행시 어느 DLL을 쓰게 될지 모르는데 선언부에 DLL의 함수를 선언할 때

    procedure AAA(a,b:String);StdCall;Externa. ?????? ;

    위 물음표 부분에 어떤 파일명이 올지 모르는데 어떻게 선언하는지를 모르겠거든요.

    물음표 부분에 변수를 쓸 수 있으면 모를까 상수(Const 포함) 밖에 올 수가 없던데 사이트에 따라 저 부분에 파일명을 어떻게 넣어줄 수 있을지...

    흑흑..... 다시한번만 알려주시면 안될까요??
    고맙습니다..

  • Profile
    한원희 2003.02.06 20:29
    안녕하세요. 한원희입니다.

    음... 아래와 같이 정적으로 하게되면, 추가되는 DLL을 적용할 수가 없게 되죠. DLL을 동적 로딩해야 합니다. LoadLibrary 함수를 이용해서요...
    아래는 어느 책에 있는 간단한 예제입니다.

    procedure TForm1.Button1Click(Sender: TObject);
    type
    TFunc = function(str : string) : boolean;  stdcall;
    var
      H : THandle;
      MyFunc : TFunc;
      s : string;
    begin
       H := LoadLibrary('seconddll.dll');
       if H<32 then begin
          ShowMessage('No Dll');
          exit;
       end;
       @MyFunc := GetProcAddress(H, 'JuminValid');
       if not (@MyFunc = nil) then begin
         if (not MyFunc((Edit1.text))) then
            ShowMessage('주민번호가 잘못되었습니다.')
         else
            ShowMessage('주민번호가 맞습니다.');
       end;
       FreeLibrary(H);
    end;



    만든사람은 각 DLL이 어느 사이트것인지 알고 있지만, DLL을 호출하는 프로그램은 해당 DLL을 적용할 수 있도록 수정하지 않는 이상 일반적으로 그 DLL이 어느 사이트에 사용될 것인지 미리 알 수는 업죠. 그래서, DLL에 어느 사이트의 정보인지 알 수 있도록 해당 정보를 얻는 과정이 필요하다는 것이죠.
    DLL의 정보를 프로그램이 알 수 있도록 하기 위해서, DLL 자신의 정보(사이트명)을 넘겨주는 함수를 각 DLL에 추가하거나, 리소스로 사이트의 이름을 DLL마다 넣어서 그 정보를 읽어서 각 DLL을 구별할 수 있겠죠.

  • Profile
    또치 2003.02.06 21:29
    정말 고맙습니다.

    책에 있는 줄 알았으면 책을 더 찾아보았을텐데.... ㅡㅡ;

    덕분에 고민고민 했던게 한가지 해결되었어요.

    헤헷... 그럼.. 즐코~



  • Profile
    또치 2003.02.06 21:27
    정말 고맙습니다.

    책에 있는 줄 알았으면 책을 더 찾아보았을텐데.... ㅡㅡ;

    덕분에 고민고민 했던게 한가지 해결되었어요.

    헤헷... 그럼.. 즐코~



    • 머슴
      2003.02.07 06:28
        바뀐 시험으로는 책이 안나온데요... 수지가 안맞는다나...   방법은 VB책의 문...
    • 델파이정복자
      2003.02.07 20:05
      답변 고마웠습니다... 수고하세여.. 님.........
    • 이뿌이
    • 2003.02.06 20:42
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2003.02.06 20:47
      안녕하세요 하얀까마귀 입니다. 디비 그리드라면 dataSet에 연결이 되어있을껍니다. 디비그리드의 클...
    • 이뿌이
      2003.02.06 20:48
      답변해 주셔서 정말 감사합니다. 즐프하세염
    • 이병훈
      2003.02.07 07:20
      안녕하세요. 헐.~ 저와 같은 이름이네여. 푸헐~ 머 똑같습니다. 솔라리스라구 다를 것이 있나요...
    • 구창민
      2003.02.06 23:17
      지금 델파이코리아(www.delphikorea.com)로 달려가셔서 강좌나 팁란중 어딘가에 권용길님이 쓰신 '...
    • KDDG_ZZOM
      2003.02.06 20:38
      아마도... BDE Administrator에서 Configuration텝에서 Native의 오라클을 선택하시고 VENDOR INIT인가???...
    • 주엔이
    • 2003.02.06 19:32
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김상수
    • 2003.02.06 06:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_ZZOM
      2003.02.06 19:09
      글세요...^^ 근데 쿼리문이 얼마나 복잡하길레 사이즈걱정을... 예전에 한 1000라인되는 쿼리문도 문제...
    • 백호
    • 2003.02.06 05:21
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 권민호
    • 2003.02.06 05:19
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.06 23:39
      정확한 원인이 아닐수도 있습니다만, Thread 를 생성시 FreeOnTerminate 를 이용하시고 종료시 Termi...
    • 아폴론
    • 2003.02.06 04:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 아폴론
      2003.02.06 21:31
      with ADOConnection1 do begin    try       connectionstri...
    • 한방러쉬
      2003.02.06 23:56
      SQL 서버 클라이언트 안깔려도 됩니다요...
    • 이뿌이
    • 2003.02.06 04:13
    • 0 COMMENTS
    • /
    • 0 LIKES
    • KDDG_hyun
    • 2003.02.06 02:42
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.06 03:09
      현아 연산식이 길게 늘어졌구나.. 연산 우선순위를 차례로 나열해서 코딩해두고, 하나씩 연산해서 밑...
    • KDDG_hyun
      2003.02.06 03:18
      울 길드 게시판에두 적었는데 String 로 형식을 변환함면 갑이 제대로 나와요.. 아 머리아포요..
    • 성더기
      2003.02.06 09:14
      소수점 이하는 무저건 잘라 버릴거 같은디... 아닌가?..ㅡㅡ;;
    • KDDG_hyun
      2003.02.06 18:52
      Trunc 말고 round 도 써 봤는데 매 한가지고.. 둘다 안써봐도 그러고.. 그게 아니더라도 걍 0 이 나...
    • 또치
      2003.02.06 20:00
      A := Trunc((Aa * Q_qry1.FieldByName('AAa').AsInteger / 100 + Ab *    Q_qry1.Fiel...
    • 유재훈
    • 2003.02.06 02:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.02.06 02:53
      안녕하세요~ 구창민입니다. 머 여러가지 방법이 있겠지만, 어플내에서만 동작하는 훅을 설치해보세여...
    • 도니
    • 2003.02.06 02:20
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Cali
      2003.02.06 03:13
      indexFieldNames 으로는 해결방법이 없는듯 한데.. indexName 으로 써 보세요.. SimpleDataSet.Index...
    • 도니
      2003.02.06 19:54
      아직 안해봐서 되는지 안되는지는 모르겠지만.. 신경써주셔서 감사합니다..^^
    • KDDG_BaSTaD
      2003.02.06 21:52
      ==> 말그대로 등록되지 않은 이미지 확장자라는 뜻입니다. 기본적으로 Graphics.pas 에는 bmp만 등록...
    • KDDG_ZZOM
      2003.02.06 18:56
      image1.picture.loadfromfile('c:programimagebackground풍경구 름.jpg'); 여기서... 디렉토리가 잘못된...
    • KDDG_ZZOM
      2003.02.06 19:02
      OnEnter에서 해보세요... 저도 예전에 비슷한걸 한것같네요... 근데 개인적으로 콤보박스는 리소스를 ...
    • 성더기
      2003.02.06 09:17
      ComboBox에 값을 채우는 프로시져를 하나 만드시구 디비가 변경될때마다 그넘을 호출해 주는 것은 어떨까...
    • 델파이탐크루즈
      2003.02.06 02:17
      방법론을 알려드릴께여... 한번 해보세요.. 처음에는 폼 생성될때 Query로 끌고 오셔서 item add...
    • 또치
    • 2003.02.06 01:29
    • 5 COMMENTS
    • /
    • 0 LIKES
    • 한원희
      2003.02.06 07:26
      안녕하세요. 한원희입니다. 동일한 함수로 정의하고, 각 DLL을 어떻게 사이트별로 구별하느냐가 문제군...
    • 또치
      2003.02.06 20:06
      답변 고맙습니다. ^^ 근데여..... 각 DLL 마다 자신의 정보를 알려주는 함수를 동일한 이름으로 추가...
    • 한원희
      2003.02.06 20:29
      안녕하세요. 한원희입니다. 음... 아래와 같이 정적으로 하게되면, 추가되는 DLL을 적용할 수가 없게 되...
    • 또치
      2003.02.06 21:29
      정말 고맙습니다. 책에 있는 줄 알았으면 책을 더 찾아보았을텐데.... ㅡㅡ; 덕분에 고민고민 했던게...
    • 또치
      2003.02.06 21:27
      정말 고맙습니다. 책에 있는 줄 알았으면 책을 더 찾아보았을텐데.... ㅡㅡ; 덕분에 고민고민 했던게...
    • 하얀까마귀
      2003.02.06 00:44
      안녕하세요 하얀까마귀 입니다. 폼의 프로퍼티에 보시면 position 을 조정해주시면 됩니다. poMainFo...
    • 도니
    • 2003.02.05 22:53
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 윤민규
      2003.02.05 23:07
      update Table1 set Date = 'YYYYMMDD' where Date = (Select max(Date) From Table1) 이런 식으로 쓰면 ...
    • 도니
      2003.02.05 23:26
    • 이중철
      2003.02.05 23:04
      냉무
    • 도니
      2003.02.05 23:28