2010-07-28 4 views
1

J'ai besoin de charger une chaîne qui est placée dans la dll de ressources d'un processus différent, à condition que le processus soit en cours au moment de l'appel.Comment charger une chaîne à partir de la ressource d'un processus différent?

J'ai essayé code suivant -

HMODULE hRes = ::LoadLibrary(_T("SomeResource.dll")); 

    TCHAR buffer[50]; 
    ::LoadString(hRes, IDS_SOME_ID, buffer, 50); 

Ce code fonctionne bien lors de l'exécution en mode débogage. Mais en mode de libération, LoadLibrary renvoie zéro. Pourquoi?

Ai-je raté quelque chose? Aidez-moi, s'il vous plaît. J'utilise le compilateur VC7.1.

+0

Que dit 'GetLastError()'? Peut-être que SomeResource.dll n'est pas compilé/déployé dans le répertoire Release. – pascal

+1

est SomeResource.dll est dans le répertoire Release (ou le même répertoire à partir duquel vous exécutez votre version exe)? – Naveen

+0

oui, a trouvé le problème. SomeResource.dll est dans un répertoire différent de celui où la version exe est utilisée ... FullPath pour la DLL et ... ça marche. Merci à tous pour votre aide rapide. :) – Hemant

Répondre

1

Il pourrait y avoir un problème de trouver"SomeResource.dll". Lorsque vous exécutez à partir du débogueur, l'exécutable est démarré à partir du chemin du projet. Si la DLL peut être trouvée à partir de là. c'est bien. Lorsque vous exécutez à partir de l'extérieur de l'IDE, l'exécutable est démarré à partir d'un dossier différent. Il se pourrait que la DLL ne puisse pas être trouvée à partir de là.

0

Je ne faisais semblant de réponse, mais pourrait-il ajouter du code ci-dessous pour diagnostiquer problème:

if(hRes == 0){ 
LPVOID lpMsgBuf; 
DWORD dw = GetLastError(); 

FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | 
    FORMAT_MESSAGE_FROM_SYSTEM, 
    NULL, 
    dw, 
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
    (LPTSTR) &lpMsgBuf, 
    0, NULL); 


MessageBox(NULL, (LPTSTR)lpMsgBuf, "Error", MB_OK); 

LocalFree(lpMsgBuf); 
} 
+0

'szBuf' n'est pas utilisé. – pascal

+0

Pourquoi faire de 'lpMsgBuf' un' LPVOID' juste pour le convertir en 'LPTSTR' partout où vous l'utilisez? Pourquoi ne pas faire LPTSTR dès le départ? – sbi

+0

@pascal - merci, vient de supprimer – Dewfy

Questions connexes