자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi Delphi XE8 Loadlibrary를 이용한 VC++ dll 사용에 대한 문의드립니다.
2015.12.24 15:12
안녕하세요,
Delphi VCL form에서 vc++로 만든 dll을 가져다 사용하는 것을 테스트 하려고 합니다.
dll 파일을 읽어오는데 까지는 성공하지만, 해당 dll에서 address를 가져오는데 문제가 발생합니다.
function Foo( x:Integer ):Integer; stdcall; external 'IPCamera_dll.dll'; 과 같이 직접 불러와 사용할 때에
그림과 같이 찾을 수 없다는 메세지를 확인할 수 있었습니다.
dll 작성시에는 아래 그림과 같이 함수를 작성해 두었습니다.
Handle4DLL:=LoadLibrary( ImportDLL ); 를 이용해 정상적으로 읽어짐을 확인하고
GetProcAddress(Handle4DLL, 'Foo');로 Foo를 불러 사용하려고 할 때에도 class $0000005 access violation 메세지가
나타나고 있습니다.
혹시 어떤 문제인지 확인해 주실 수 있을까요?
현재 사용중인 컴파일 도구는 Delphi XE8 Trial 버전이며 윈도우 10 환경에서 사용하고 있습니다.
(* Google 검색시 간혹 Demo version 에서 Protection이 걸려 있다는 답변이 있는데 실제로 dll 사용에 대한
Protection이 걸려있는게 맞는지요?)
Delphi Delphi XE8 Loadlibrary를 이용한 VC++ dll 사용에 대한 문의드립니다.
2015.12.24 15:12
안녕하세요,
Delphi VCL form에서 vc++로 만든 dll을 가져다 사용하는 것을 테스트 하려고 합니다.
dll 파일을 읽어오는데 까지는 성공하지만, 해당 dll에서 address를 가져오는데 문제가 발생합니다.
function Foo( x:Integer ):Integer; stdcall; external 'IPCamera_dll.dll'; 과 같이 직접 불러와 사용할 때에
그림과 같이 찾을 수 없다는 메세지를 확인할 수 있었습니다.
dll 작성시에는 아래 그림과 같이 함수를 작성해 두었습니다.
Handle4DLL:=LoadLibrary( ImportDLL ); 를 이용해 정상적으로 읽어짐을 확인하고
GetProcAddress(Handle4DLL, 'Foo');로 Foo를 불러 사용하려고 할 때에도 class $0000005 access violation 메세지가
나타나고 있습니다.
혹시 어떤 문제인지 확인해 주실 수 있을까요?
현재 사용중인 컴파일 도구는 Delphi XE8 Trial 버전이며 윈도우 10 환경에서 사용하고 있습니다.
(* Google 검색시 간혹 Demo version 에서 Protection이 걸려 있다는 답변이 있는데 실제로 dll 사용에 대한
Protection이 걸려있는게 맞는지요?)
Static 과 Dynamic 에서 모두 모듈이 호출이 안되는 것으로 보아서 Fuction을 라이브러리에 등록 하셨는지 확인하십시오.
보통 델파이에서는 Function 을 선언하고 구현(코딩)하고 별도로 라이브러리 소스에 exports 하고 Function 이름을 등록해야 호출 됩니다..
보통의 C언어에서도 export할 함수의 정의를 위하여 Header File을 생성하셔야 하는 걸로 알고 있습니다.
http://rainiac.com/dev/index.php/dll-%EC%A0%9C%EC%9E%91%EB%B0%A9%EB%B2%95-1-non-mfc-dll/
그 외의 경우 라이브러리와 실행 파일 디렉터리가 일치 하는지 확인 하시고 함수의 대소문자 만 정확히 구변되면 호출 됩니다.