안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당 임펠리테리입니다.
공부했던 게 워낙 오래되었구, 또 요즘은 제가 dll을 쓸 기회가 별로 없어서 기억이
가물거리는데.. dll에서 익스포트한 함수 이름에 @가 붙는 것은 calling convension
때문인 걸로 알고 있습니다. calling convension이 stdcall일 경우에는 이 @가 붙지
않습니다만, cdecl이었던가 __fastcall 컨벤션에서는 @가 붙습니다. 참고할 책이
집에 있어서 정확한 답을 못드려 아쉽네요. 하지만 익스포트하는 함수의 앞에서
stdcall로 지정해주면 @는 나타나지 않을 겁니다. 이렇게 @를 붙여주는 이유가,
특정 calling convension을 지정해주기 위해서이기 때문입니다.
그리고.. 두번째 질문은, 실제로 system.obj가 없는 것입니다. 그 이유를 설명하자면
조금 길어지는데, 간단히 설명하자면 라이브러리 자체가 델파이로 되어 있어서
패키지를 동적으로 링크하면 문제가 없지만 정적으로 링크라는 경우에 해당 obj
파일을 찾게 되는데, 델파이 라이브러리이므로 당연히 없는 겁니다. 만약 꼭
필요하다면 source/vcl 디렉토리에 system.pas 파일이 있으므로 이걸 빌더에서
컴파일하면 obj 파일이 생성됩니다.
그럼 참고하시길...
임펠리테리 박지훈이었습니다.
( http://myhome.thrunet.com/~cbuilder, cbuilder@thrunet.com)
|