링커 도구 경고 LNK4222(C++)

보기 전환:
ScriptFree
Visual C++ 개념: C/C++ 프로그램 빌드
링커 도구 경고 LNK4222

오류 메시지

내보낸 'symbol' 기호를 서수로 지정하면 안 됩니다.
exported symbol 'symbol' should not be assigned an ordinal

다음 기호를 서수로 내보내면 안 됩니다.

  • DllCanUnloadNow

  • DllGetClassObject

  • DllGetClassFactoryFromClassString

  • DllInstall

  • DllRegisterServer

  • DllRegisterServerEx

  • DllUnregisterServer

이러한 함수는 항상 GetProcAddress를 사용하여 이름을 기준으로 찾습니다. 이 종류의 내보내기는 대형 이미지를 생성할 수 있으므로 링커는 이러한 내보내기를 경고합니다. 이 경고는 내보내기의 수가 비교적 적으며 동시에 서수 내보내기의 범위가 큰 경우에 발생할 수 있습니다. 예를 들면 다음과 같습니다.

EXPORTS
   DllGetClassObject   @1
   MyOtherAPI      @100

위의 코드에서 98개(2-99)의 필터로 구성된 내보내기 주소 테이블에는 슬롯이 100개 필요한 반면에,

EXPORTS
   DllGetClassObject
   MyOtherAPI      @100

위의 코드에는 슬롯이 두 개 필요합니다. /EXPORT 링커 옵션으로 내보낼 수 있음을 기억하십시오.