2009-06-30 3 views
0

이것은 우리가 갈 여기에 약간의 Qt는 구체적으로하지만, 수 ...(는 Win32)

은 내가 몇 가지와 인터페이스 할 필요 Qt는 응용 프로그램을 가지고 내가 올바르게 링크 할 수 있기 때문에 모든 것이 제대로 작동하는 것처럼 보이지만 라이브러리 중 하나에서 함수를 호출하려고 할 때마다 항상 액세스 위반 오류가 발생합니다. 다른 라이브러리에서는 프로세스에서 10 개의 함수처럼 호출하지만, 11 번째 함수는 나에게 똑같은 것을 제공합니다. 내가 틀린 것이 더 분명해야한다고 생각하기 때문에 여기에 첫 번째 것에 대한 구체적인 내용을 설명 할 것입니다.

라이브러리는 .lib, .h과 함께 제공되며 .dll을 system32에 설치합니다.

__declspec(dllimport) unsigned short InPortB(unsigned long Port); 

라이브러리는 데이터를 기록하기 위해이 기능을 사용하여 디지털 IO 카드와 함께 제공 : 여기에 .h에서 함수 선언입니다. 포트는 카드의 주소입니다. 나는 그 주소가 0xdeb0이라는 것을 알고 카드를 가지고있는 샘플 코드가 오류없이 그것을하기 때문에이 주소에 쓰기가 유효하다는 것을 확인할 수있다. 내가 얻은 샘플 코드는 C++ VS2005 솔루션입니다. 나는 그것을 만들 수 있고 모든 것이 좋습니다. 샘플 코드를 Qt 앱에 복사하려고하면 액세스 위반이 발생합니다.

따라서 처음에는 규칙을 호출하는 것과 불일치가 있다고 생각했지만 애플리케이션이 어떻게 연결되는지는 알 수 없습니다.

방금 ​​내 응용 프로그램의 exe를 봤는데 조금 이상합니다. 내 응용 프로그램이 실제로 외부 라이브러리의 함수를 호출하지 않는 것 같습니다. 또한 Windows 오류 메시지에서 디버그 출력을 볼 때 어디에도로드 된 DLL이 표시되지 않습니다.

dll을 수동으로로드해야합니까? Visual Studio 프로젝트를 실행할 때 DLL에 대해 아무 것도 할 필요가 없기 때문에 나에게 이해가되지 않습니다. 나는 꽤 여기에서 길을 잃는다.

+0

디버거에서 실행하고 어떤 결과가 발생 했습니까? 액세스 위반 오류가 발생할 때 스택 추적을 얻는 것이 쉽습니다. 그리고 BTW는 "QT"가 아니라 "Qt"로 작성되었습니다. –

답변

0

다른 라이브러리가 Qt 및 앱과 동일한 런타임 (주로 디버그/릴리스)에 맞게 빌드되었는지 확인하십시오.