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
[15588] DLL 사용 문의 입니다.
쿠핑 [couping] 1903 읽음    2015-11-12 14:48
안녕하세요.

보통 DLL 사용은 어찌 해서 사용했는데....

구조체와 같이 사용하는건 처음이라 이렇게 질문 올립니다.

DLL은 c++만들어 진것 같습니다.

일단 내용은 dll로 로그인을 하는 부분입니다.

*DLL 내용입니다.
[로그인 결과 받기 구조체]
struct OBSIResult {
  long lResult;
  char szMessage[1024];
char szNoticeUrl[1024]; 
};
struct OBSILoginResult { 
OBSIResult Result; 
OBSIResult ResultOaasys; 
unsigned long ulMaxReceiverCount; 
};

[로그인 처리]
long OBSILogin( const char* szUserID,  const char* szPassword, char* szISVAPIKey,  OBSILoginResult* pResult)

이 내용을 델파이에서 처리하려고 합니다.
그래서 저는

============================================================================
procedure TfrmMain.Button1Click(Sender: TObject);
type
  TOBSIResult = record
    lResult : LONG;
    szMessage : PChar;
    szNoticeUrl : PChar;
  end;

  TOBSILoginResult = record
    result : TOBSIResult;
    resultOaasys : TOBSIResult;
    ulMaxReceiverCount : LONG;
  end;
type
  TOBSILogin = function(szUserID : string; szPassword : string; szISVAPIKey : string; pResult : TOBSILoginResult):LONG; stdcall;
var
  dll_hwd : THandle;
  OBSILogin : TOBSILogin;
  OBSILoginResult : TOBSILoginResult;

  iRet : LONG;

  r1, r2 : PChar;
  r3 : LONG;
begin
  dll_hwd := LoadLibrary('OBSISDK.dll');//DLL 파일선언
  @OBSILogin := GetProcAddress(dll_hwd, 'OBSILogin');

  iRet := OBSILogin('id', 'password', '', &OBSILoginResult);

  r1 := OBSIResult.result;//결과 받기
  r2 := OBSIResult.resultOaasys;//결과 받기
  r3 := OBSIResult.ulMaxReceiverCount;//결과 받기

  try
    FreeLibrary(dll_hwd);
  except
  end;

end;
============================================================================

이렇게 해봤습니다.

그런데 제공된 샘플 실행파일(MFC 로 만들어 졌습니다.)은 정상적으로 됩니다.

저의 오류는 일단 TOBSILoginResult  에서 TOBSIResult 를 바라보고 있다는 부분부터 어려움이 있습니다.
저렇게 하는게 맞는지???
맞지는 않는것 같습니다.
"iRet := OBSILogin('id', 'password', '', &OBSILoginResult);" 이 부분에서 오류가 나기 때문입니다.
record를 하나만 썼을때는 이 부분이 오류가 없지만...어쨌든 구조체가 저렇게 생긴 DLL이라....


이건 도대체 어떻게 하는건가요???

부디 답변 부탁드립니다.


+ -

관련 글 리스트
15588 DLL 사용 문의 입니다. 쿠핑 1903 2015/11/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.