님 덕분에 한 가지 더 배웠습니다. 감사한 마음을 어떻게 전해 드려야할지.ㅋㅋ
마음은 음료수라두 한 잔 사드리구 싶은데..
어제 서스를 보고 직접코딩을 해보았습니다. 참 많이 도움이 되었구요.
그중에 이해 안되는 부분이 있어서 요약 해봤습니다.
1.코드중에서 ErrordDllGetVersion 함수가 이해가 안되어서요. 요 함수를 보면
stdcall이라구 붙여주었는데 이것두 dll함수인가요? dll함수라면 동적으로
해야되지 않나요? 그리구
2.DllGetVersion := ErroredDllGetVersion 에서 ErroredDllGetVersion 함수를
호출할 때 인자값은 넣어 주지 않아도 에러가 발생 안하던데 왜그런가요?
3.ErroredDllGetVersion함수는 호출되어도 실행되지 않던데 왜그런가요?
4.MessageBox(0,pchar('dllGetVersion 함수 없습니다'),pchar('Error'),MB_OK)
이 메시지는 함수가 호출되면 자동으로 동작하는데 조건을 걸어서 만족하면 실행되어야 하는것은 아닌지요? 예를 들어 GetProcAddress에서 포인터주소가 없을 때라든지.
5.그리구 pchar 요거는 붙여주어야하나요? 에러나던데요. 없으면.....
감사하구요. 제가 보답한 기회가 있다면 말씀해주세요..
호접의 답변으로 기쁘셨다니 호접의 한사람으로써 기쁜 맘을... ^^
1.코드중에서 ErrordDllGetVersion 함수가 이해가 안되어서요. 요 함수를 보면
stdcall이라구 붙여주었는데 이것두 dll함수인가요? dll함수라면 동적으로
해야되지 않나요? 그리구
1. 답.
제가 올린 예제 코드는 함수 포인터를 사용하는 겁니다.
함수 포인터와 똑같은 형식으로 에러함수를 구현 한거죠.
이건 DLL코드가 아니라 DLL코드가 없거나, DLL이 없거나 등... 에러의 상황에서 설정되는 코드입니다.
2.DllGetVersion := ErroredDllGetVersion 에서 ErroredDllGetVersion 함수를
호출할 때 인자값은 넣어 주지 않아도 에러가 발생 안하던데 왜그런가요?
2. 답.
위 부분은 함수를 호출하는 것이 아니라 함수 포인터를 설정하는 부분입니다. 따라서 에러 발생이 없습니다. 오히려 위의 경우
DllGetVersion := ErroredDllGetVersion(....); 는 에러 죠... ErroredDllGetVersion의 리턴 값은 HRESULT인 데 담는 놈이 포인터니깐..
3.ErroredDllGetVersion함수는 호출되어도 실행되지 않던데 왜그런가요?
3. 답.
예제를 그대로 돌리셨으면 초기에 ErroredDllGetVersion이 설정되고 난 다음 DLL함수로 치환이 되어서 그럴 겁니다. LoadLibrary 부분에서 dll 이름을 엉뚱한 놈으로 변경시키면 당연히... ErroredDllGetVersion 가 동작하게 되죠.
4.MessageBox(0,pchar('dllGetVersion 함수 없습니다'),pchar('Error'),MB_OK)
이 메시지는 함수가 호출되면 자동으로 동작하는데 조건을 걸어서 만족하면 실행되어야 하는것은 아닌지요? 예를 들어 GetProcAddress에서 포인터주소가 없을 때라든지.
4. 답.
그렇죠... 게을러서 한 경우로만 코딩한 겁니다...^^
5.그리구 pchar 요거는 붙여주어야하나요? 에러나던데요. 없으면.....
5. 답.
아마 델파이 5아니신가요? 암튼 MessgeBox 호출 형식이 PChar를 요구합니다.
헉헉헉.. 출장 떠나기 5분전에 부랴부랴 써서리... 주절주절이군요...
다다음주에나 다시 들어오게 되겠네요...
오늘도 즐입니다.