2013-11-26 2 views
2

win7 및 delphi 2010에서 작업 중이었습니다. 여기에 제 코드가 있습니다.dll에서 대/소문자를 구분합니까?

library CFGFunc; 

uses 
sysUtils 
Un_ExFuncDll in "base\Un_ExFuncDll.pas" 
... 

exports 
LoadExFuncsInDLL, 
... 

및 Un_ExFuncDll.pas 컴파일 후 여기

unit Un_ExFuncDll; 
interface  
uses 
    Classes; 
    procedure LoadexfuncsIndll(); stdcall; 
    ... 

이며, DLL은 작동하지 않습니다. 그러나 LoadexfuncsIndll()LoadExFuncsInDLL() (수출품과 정확히 일치)로 바 꾸었습니다. Un_ExFuncDll.pas입니다. 그 때 일했다.

델파이는 입니다. 그러나 dll에서의 수출은 대소 문자가 민감한 것 같습니다.. 그럼, 그들과 무슨 상관이야?

+3

이것은 OS 로더 인 winapi에 의해 구속됩니다. f.i 참조. docPs에 대한 GetProcAddress. –

+0

델파이 만 대소 문자를 구분한다면 ..... –

답변

10

DLL 함수 가져 오기/내보내기 IS은 항상 대소 문자를 구별합니다. 이 동작은 대소 문자를 구별하는 OS DLL 로더에 연결됩니다. 이는 대소 문자를 구별하는 Delphi 언어의 유일한 영역 중 하나입니다. 이것은 적어도 부분적으로 동작을 설명되어 있습니다

Writing Dynamically Loaded Libraries

이름 지정은 문자열 상수 다음에 지시 이름로 구성되어 있습니다. 항목에 이름이 지정자가 없으면 루틴은 원래 선언 된 이름 과 동일한 철자와 대소 문자으로 내보내집니다. 루틴을 다른 이름으로 내보내려면 이름 절을 사용하십시오. 당신의 가져 오기 선언에서

Procedures and Functions (Delphi)

, 루틴의 이름의 정확한 철자와 대소 문자와 일치해야합니다. 나중에 가져온 루틴을 호출하면 이름에서 대/소문자를 구분하지 않습니다.

+1

나 자신이 확인하기 위해 몇 가지 빠르고 간단한 테스트를 통해 오래 전에 배웠던 교훈. –

+1

@Jerry 테스트를 쓰는 이유는 무엇입니까? 문서를 읽으십시오. MSDN의 GetProcAddress 문서에 분명하게 명시되어 있습니다. –

+2

OT : 절차 ['Register'] (http://docwiki.embarcadero.com/RADStudio/XE5/en/Declaring_the_Register_Procedure)는 아마도 델파이에서 대소 문자를 구분하는 마지막 사례 일 것입니다. – TLama

관련 문제