Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[14550] [질문] DLL 안에 있는 쿼리 실행
cdrd [] 1808 읽음    2013-01-09 08:25
DLL 실행관련하여 문의드립니다.

프로그램 구조는 아래와 같습니다.
1. 메인 프로그램에 파라메터를 입력합니다.
2. 메인 프로그램에서 받은 파라메터로 DLL을 호출합니다.
2. DLL 안에 있는 쿼리가 실행됩니다.
3. DLL에서 처리된 데이터를 메인 프로그램으로 돌려줍니다.
   데이터는 1개 또는 그 이상일 수 있으므로, 배열 또는 리스트로 받으려고 합니다.


***************************************************************
DLL 소스
DLL안에 데이터모듈이 있습니다. (SQLConnection, SQLQuery 사용)
***************************************************************

//  데이터 조회
function  SearchData  ( Input : String  ) : PChar; stdcall;
var
  sText : String;
  MAIN_SQL  : String;
begin
  Result  :=  PChar(  ''  );

  MAIN_SQL  :=  '';
  MAIN_SQL  :=  MAIN_SQL  + #13 + 'SELECT * FROM  테이블  ';
  MAIN_SQL  :=  MAIN_SQL  + #13 + ' WHERE ';
  MAIN_SQL  :=  MAIN_SQL + #13 + Format('      조건절 = ''%s''  ' , [ Input ] );

//  ShowMessage(  MAIN_SQL  );

  with  COM_DM.SQLQuery1  do
  begin
      Close;
      SQL.Clear;
      SQL.Text  :=  MAIN_SQL;
      Open;

      ShowMessage(  MAIN_SQL  );

      if  IsEmpty = True  then
        begin
          ShowMessage(  '검색된 데이터가 없습니다.' );
          Exit;
        end;

   while not Eof do
    begin
          sText   :=  Fields[00].AsString + ';' + Fields[01].AsString + ';' + Fields[02].AsString;
          ShowMessage(  sText  );
          Result  :=  PChar(  sText );
     Next;
        end;
    end;
end;


***************************************************************
메인 프로그램 소스
***************************************************************
procedure TForm3.ButtonGetDataClick(Sender: TObject);
type
  TSearchData = function  ( Input : String  ) : PChar; stdcall;
var
  SearchData : TSearchData;
  H : HINST;
  S : PChar;
begin
  Memo1.Lines.Clear;

  H :=  LoadLibrary( PChar(  ImportDLLFile ) );
  if  H <=  0 then
    begin
      ShowMessage(  '로딩 에러 : ' + IntToStr(  GetLastError  ) );
    end
  else
    begin
      try
        @SearchData :=  GetProcAddress( H,  PChar(  'SearchData'  ) );

      if @SearchData = nil then
       begin
        ShowMessage( 'DLL 함수의 Address를 가져오지 못했습니다!' );
        Exit;
       end;

        S :=  SearchData(  PChar(  Edit1.Text ) );  <-- 디버그하면 여기서 에러 나옵니다.

        if  H <>  0 then
          begin
            Memo1.Lines.Add( S );
          end
        else
          begin
            ShowMessage(  'ERROR!!' );
          end;

      finally
        FreeLibrary(  H );
      end;
    end;
end;
<
<


+ -

관련 글 리스트
14550 [질문] DLL 안에 있는 쿼리 실행 cdrd 1808 2013/01/09
14555     Re:[질문] DLL 안에 있는 쿼리 실행 cdrd 1711 2013/01/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.