안녕하세요.
보통 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이라....
이건 도대체 어떻게 하는건가요???
부디 답변 부탁드립니다.
|