2009-07-23 17 views
3

J'ai une fonction statique dans dll qui charge la chaîne à partir de la ressource en utilisant LoadString(). Quand j'appelle cette fonction de cette DLL tout fonctionne bien. Mais lorsque j'appelle cette fonction d'un autre module (contrôle activeX), LoadString échoue avec l'erreur ERROR_RESOURCE_NAME_NOT_FOUND. J'ai essayé avec la macro AFX_MANAGE_STATE mais cela n'a pas aidé. Est-ce que quelqu'un sait ce qui pourrait être un problème ici et quelle est la solution?MFC LoadString dans dll échoue

+1

Quelle poignée de module passez-vous dans LoadString()? – sharptooth

+0

Je n'utilise pas la poignée du module explicitement. Par exemple: CString strTmp; strTmp.LoadString (IDS_TEMP); –

Répondre

6

Si la chaîne est dans une ressource de la DLL différente, vous devez définir le handle de ressource de l'autre module pour le faire fonctionner. Essayez de définir le handle de ressource en utilisant la méthode AfxSetResourceHandle.

+0

Je n'utilise pas le handle de ressource (j'utilise LoadString de CString). J'appelle LoadString de la classe/fonction qui appartient à cette DLL. Et puis j'appelle cette fonction de activeX. –

+0

@Aleksandar: Si vous ne passez pas le handle du module dans CString :: LoadString(), il ne cherchera que dans le module courant. Il n'y a pas moyen de contourner cela. – sharptooth

5

Si vous ne transmettez pas le handle à l'instance du module à LoadString, il utilise le handle de ressource par défaut. Le handle de ressource par défaut est défini par défaut sur le handle de module en cours. Donc, si vous appelez LoadString du module qui a la chaîne requise, tout fonctionne bien. Si vous appelez LoadString d'un autre module, il n'a pas pu trouver la chaîne requise et vous obtiendrez l'erreur ERROR_RESOURCE_NAME_NOT_FOUND. Vous pouvez le remplacer en appelant la fonction AfxSetResourceHandle.

Ou vous pouvez explicitement sélectionner le module avec des ressources en passant le handle de ressource à LoadString.

Questions connexes