2009-04-29 2 views
3

About.com guide to embedding dll's in Delphi EXE's을 수행했는데 실제로 DLL을 외부 함수로 사용하지 않는 한 작동합니다. uses 절에서 참조 된 유닛보다 일찍 링크 된 코드를 얻는 방법이 있습니까?
시도 :DLL을 리소스로 포함하여 시작 프로그램을 시작할 때 문제가 발생했습니다.

  • 이 코드가 말하는 바를 정확히 수행합니다.
  • 외부 기능을 사용하는 장치를 사용하는 양식의 초기화 섹션에이 코드를 삽입하십시오.
  • 외부 기능을 사용하는 장치의 초기화 섹션에이 코드를 삽입하십시오. 이 글은 아니기 때문에 내가 갖는 문제는 보통 'fundll.dll'로드 할 수 없습니다가 (이다

    function MyFunction: Integer; stdcall; external 'fundll.dll'; 
    

    :

그리고 외부 함수에 의해 내가처럼 보이는 기능을 말하는 겁니다 디렉토리). 코드가 그렇게되면 Zarko의 코드가 작동합니다 (꽤 멋지다, 그 폴더에 dll이 생성됩니다). 그러나 필요한 외부 함수를 사용할 때 프로젝트가 진행되기 전에 충돌이 발생합니다. 당신은 외부 함수와 함께이 작업을 수행 할 수

+0

는, 다음은 "리소스 DLL."아니다 이 DLL은 리소스로 포함 된 것입니다. 리소스 DLL은 리소스를 보유하는 것이 유일한 목적입니다. –

+0

호기심입니다. 왜 EXE 안에 DLL을 넣고 싶습니까? DLL을 사용하는 목적을 무력화시키는 것 같습니다. –

+1

Mason을 사용하면 독립적 인 프로그램을 배포 할 수 있으며 소스가 없으므로 EXE로 직접 컴파일 할 수없는 함수를 호출 할 수 있습니다. –

답변

3

, 당신은 두 가지 선택 ...

1) EXE/DLL 들러 대신 자원의 방법을 사용할 수 있습니다. 2) 외부 스타일 선언을 사용하여 라이브러리에 링크하지 않습니다. 대신 LoadLibrary, GetProcAddress 등을 사용하여 호출해야하는 함수를 참조하십시오.

리소스 메소드와 외부의 함수 선언이 섞이지 않습니다. Windows는 전에 dll을 추출하기 위해 코드가 실행되는 전에 exe를 메모리의 dll에 연결하려고합니다.

6

-에서 LoadLibrary()를 사용GetProcAddress를() 대신 DLL을 추출 후, 모든 것이 작동합니다.

이유는 OS 로더가 모든 진입 점을 확인한 후에 만 ​​코드가 실행되기 때문입니다. 원한다면 닭고기와 계란 문제의 종류. 당신이 그것을에서 함수를 호출 할 경우