2013-07-29 3 views
1

나는이 코드를 사용하여 내 플러그인을로드하려고합니다. "오류 로딩 플러그인은 지정된 모듈을 찾을 수 없습니다"이상한 오류 :

QString path = QFileDialog::getOpenFileName(0); 
QPluginLoader loader(path); 
AnprPluginInterface *i = qobject_cast< AnprPluginInterface* >(loader.instance()); 
if (i == NULL) 
    QMessageBox::information(0, "this", "error loading plugin." + loader.errorString()); 
else 
    QMessageBox::information(0, "this", "plugin loaded."); 

내가 QPluginLoader에 플러그인의 절대 경로를 보낼를하지만 말한다 캔 플러그인을 찾지 못했습니다!
오류는 다음과 같습니다

error loading plugin. "Cannot load library The specified module could not be found." 
+0

플러그인 문제 디버깅에 대한 도움말은 다음을 참조하십시오. http://qt-project.org/doc/qt-4.8/deployment-plugins.html#debugging-plugins – Mat

+0

@Mat ~> 감사합니다. 귀하의 링크가 문제를 해결했습니다. – saeed

답변

13

당신은 당신의 플러그인이 Q_INTERFACES() 매크로를 사용하여 올바른 인터페이스를 수출되어 있는지 확인 있습니까? 오류가 발생하면 다음 두 가지 사항을 확인하십시오.

1) loader.instance()는 0을 반환합니다.이 경우보고 된 오류에 대해 조사해야합니다.

2) qobject_cast는 0을 반환합니다.이 경우 문제는 누락 된 내 보낸 인터페이스에 있다고 가정합니다.

또한, 당신이 당신의 실행 경로 모두 어쩌면 당신은 전혀 오류가 발생하지 않는, 같은 코드를 실행하는 것을 고려해야한다 ... 나는이 말하는 겁니다 :

if (i == NULL) 
    // Reports the error 
    QMessageBox::information(0, "this", "error loading plugin." + loader.errorString()); 
else 
    // Hey!? WTF!? Repots the error anyway!? 
    QMessageBox::information(0, "this", "error loading plugin." + loader.errorString()); 

3) 나는 잊고 있었다 : 플러그인과 애플리케이션이 같은 방식으로 (디버그/릴리스) 빌드되고 있는지 확인한다.

4) 그런데 점검해야 할 또 다른 사항은 플러그인이 일부 종속성 (예 : 다른 동적 라이브러리)을 가지고 있는지 여부입니다. 그것은 한 번 나에게 일어난 일이고 나는 꽤 많은 시간을 들여서 DLL이 누락되었다는 것을 알기에 내 플러그인이 올바르게로드되지 못하게했습니다!

+0

오, 어리석은 실수! 아무튼 감사 해요. 셋째! 옵션 + 매트의 링크가 도움이되었습니다 : D – saeed

+0

여러분을 환영합니다! :) – Albert

+6

+1에 대한 +1. 내가 항상 잊어 버리는 것. –