2011-09-06 5 views
0

vs2005로 이전 vC++ 6.0 응용 프로그램을 포팅 할 때 다음과 같은 링커 오류가 발생하며 해결 방법을 찾으려고 노력하고 있습니다.링커 오류 LNK2019 타사 라이브러리에서

오류 LNK2019 : 확인되지 않은 외부 기호 _ 꼬마 도깨비 _CreateAwnService @ 52 기능에 언급 된 "공공 : INT __thiscall 를 CMainFrame :: CreateAsaNetworkServices (무효)"

가 제 3 자 C 라이브러리가있다 다음 API가

extern "C" 
{ 
DLLAPI IAwnServ * AWNAPI CreateAwnService(HINSTANCE hInst, 
    const char *pszDId, const char *pszDLoc, 
    AWN_DIQUAL DiQual, AWN_DOQUAL DoQual, int Prio, 
    const char *pszLicStr, const char *pszInfo, 
    AWN_REPEAT Repeat=R_LAST, TIME_T Since=0, 
    BOOL bLogin=FALSE, BOOL bDeb=FALSE); 

DLLAPI IAwnSend * AWNAPI CreateAwnSend(const IAwnSend *pSend = NULL); 
DLLAPI IAwnData * AWNAPI CreateAwnData(const char *pData = NULL, int iLen = 0); 
DLLAPI IAwnHeader * AWNAPI CreateAwnHeader(const IAwnHeader *pHeader = NULL); 
DLLAPI IAwnReference * AWNAPI CreateAwnReference(const IAwnReference *pRef = NULL); 
DLLAPI IAwnFile * AWNAPI CreateAwnFile(const char *pFile = NULL); 
DLLAPI IAwnOrder * AWNAPI CreateAwnOrder(const IAwnOrder *pOrder); 
DLLAPI IAwnVehicle * AWNAPI CreateAwnVehicle(const IAwnVehicle *pVehicle); 

DLLAPI int AWNAPI AwnCmp(const IAwnSend *pSend1, const IAwnSend *pSend2); 

DLLAPI TIME_T AWNAPI AwnGetNetTime(const char *NetTime); 
DLLAPI int AWNAPI AwnSetNetTime(char *NetTime, TIME_T Time); 
DLLAPI TIME_T AWNAPI AwnMakeQueryTime(int MonthsBack); 
DLLAPI struct tm *AWNAPI AwnSplitTime(TIME_T Time); 
DLLAPI TIME_T AWNAPI AwnMakeTime(tm *ptm); 
} 

#endif 

정의와 함께 다음과 같이 API를 호출은 다음과 같습니다

m_pIAwnService = CreateAwnService(AfxGetApp()->m_hInstance, .........) 

모든 링크가 포함되어 있는지 확인했는데 오류가있는 것 같습니다.

도움을 주시면 감사하겠습니다.

+1

음, 오류는 링커 옵션에 있습니다. * 항상 *입니다. 당신은 체크했을 수도 있지만 모든 것을 체크하지 않았거나 제대로 체크하지 않았을 수도 있습니다. –

+0

타사 라이브러리가 성공적으로 연결되어 있습니까? –

+0

@ R. Martinho Fernandes는 확인할 링커 설정을 제안 할 수 있습니다. – user655261

답변

0

은 같은데> 추가 의존성

라이브러리 경로는 링커에서 설정할 수 있습니다

-> 일반 - > 추가 라이브러리 디렉토리

헤더 파일이 #pragma를 사용하여 lib 파일을 자동으로 포함하려고 시도 할 수 있으므로 링커가 파일을 찾을 수 있는지 다시 확인해야합니다.

또 다른 사항은 dependancy walker를 사용하여 DLL을 살펴보고 스택 정리 크기에 대해 실제로 사용하려고하는 함수가 @ 52인지 확인하는 것입니다. 변수 유형의 크기가 컴파일러 버전 (예 : typedef) 사이에서 변경되었을 수도 있습니다.

+0

라이브러리 링커 입력 – user655261

+0

에서 추가 종속성에서 설정 #을 정의 #을 정의 워커와 당신 말이 맞습니다 _CreateAwnService는 출력이 제안 된 것처럼 고정되어 있지 않으므로 52시에 48이 아닙니다. – user655261

+0

@ user655261 : dependany walker의 DLL 기능은 어떻습니까?VS2005 (IIRC)에서 32 비트에서 64 비트로 변경된 TIME_T 정의 (time_t로 정의 된 경우)로 인해 발생할 수 있습니다. – tinman

0

응용 프로그램을 빌드 할 때 DLLAPI 매크로가 __declspec(dllimport)으로 정의되어 있습니까? > 입력 - - 링커에서 당신은 DLL의 가져 오기 라이브러리를 놓치고, 또는 링커를 찾을 수 없습니다처럼

+0

예 정의 된 _BUILD_AWN_DLL_으로 ifdef # 다음과 같이 #은 DLLAPI의 __declspec (dllexport) 다른 #이 DLLAPI의 __declspec (같이 DllImport) 내가 DLL 줘야 종속성을 확인했다 ENDIF – user655261

0

DLL의 경우 miss import library를 수행하는 경우이 MSDN 문서 (How To Create 32-bit Import Libraries Without .OBJs or Source)를 살펴보십시오. 이렇게하면 가져 오기 라이브러리가 제공되지 않는 타사 DLL의로드 타임 동적 연결을 만들 수 있습니다.

+0

두 링크가 작동하지 않습니다. – DuKes0mE

+0

@ DuKes0mE - 인터넷 사이트가 죽는 슬픈 일 ... 일부는 아직 살아 있기 때문에 MSDN 링크가 수정되었습니다. 그리고 그것은 좋은 것입니다. – SChepurin