QT DLL 라이브러리 호출 실패 원인 요약

1384 단어 QT
QT 호출 동적 링크 라이브러리는 다음과 같습니다.
  • DLL을 명시적으로 링크하고 DLL의 글로벌 함수를 호출합니다.
  • 링크 DLL을 표시하고 DLL의 클래스 객체, 멤버 함수를 호출합니다.
  • 암시적 링크 DLL

  • 자세한 내용은 다음 블로그를 참조하십시오.
    https://www.iteye.com/blog/qimo601-1397936

       얼마 전에 C#의 dll에 있는 함수를 QT로 호출하고 싶었는데 없습니다.h 헤더 파일 및.lib 정적 라이브러리dll 파일만 있기 때문에 현식 링크를 사용합니다.   그러나 실행 중 때때로 호출이 성공하지 못할 때가 있습니다. 예를 들어 코드는 다음과 같습니다.
    typedef int (*Fun)();
    QLibrary testLib("Protocol.dll"); //  dll  debug 
    if (testLib.load())
    {
            Fun getObj = (Fun)testLib.resolve("OpenPort");
            if (getObj)
                    {qDebug()<

    다음과 같은 몇 가지 실패 원인을 요약했습니다.
  • 첫째, DLL 파일이 맞는지 확인하세요.net의, 만약 그렇다면 변환이 필요합니다. 클래스 라이브러리로 C#의 dll를 봉인하고 함수 앞에 extern "C"를 추가합니다declspec (dllexport), 이렇게 컴파일하면 생성된 것입니다.lib .dll 파일은 Qt 프로젝트에서 직접 호출할 수 있습니다.다음 기사 참조:
  • https://blog.csdn.net/weixin_42420155/article/details/81060945 https://blog.csdn.net/weixin_42420155/article/details/81538889
  • 둘째, DLL의 위치를 파악하고 QT의 컴파일러 버전은 DLL과 대응해야 한다. 내가 이렇게 해결한 문제이다. QT를 다시 설치해서 32자리로 바꾸면 성공할 수 있다.하지만 저도 MSVC에서 MingW로 바꿨습니다. 이것도 영향을 미치는 요소 중 하나입니다.
  • 셋째, 성명된 함수 이름은 DLL의 실제 함수 이름입니다. 함수 이름이 다르기 때문일 수 있습니다. DLL을 열고 정확한 함수 이름을 찾아 시도해 보세요.그리고 함수의 매개 변수 성명도 정확해야 한다.
  • 넷째, 호출된 DLL은 종속성이 있을 수 있으며 함수 보기 도구를 이용하여 부족한 라이브러리 파일을 볼 수 있습니다.
  • 좋은 웹페이지 즐겨찾기