Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Resources dans DLL [ Archives / Au secours ] (jpeg)

lundi 8 juillet 2002 à 11:54:23 | Resources dans DLL

jpeg

J'ai un problème concernant des ressources contenues dans une DLL MFC. Par exemple, lorsque je fais appel à une boite de dialogue contenue dans cette DLL, il arrive que ce soit une autre resource contenue dans l'éxécutable qui s'affiche. Le problème vient du fait que les deux resources (celle de l'EXE et celle de la DLL) possède le même ID (voir resource.h). La seule solution que j'ai trouvé consiste à faire attention que les deux resources.h possèdent des ID différents, ce qui n'est vraiment pas intéressant et ne fait que déplacer le pb.

Autre question : quelle est exactement, la différence entre les projets "Regular MFC DLL" et "MFC extension DLL" ?
Dans quel cas utiliser l'un plutôt que l'autre

Merci d'avance ...

mercredi 14 avril 2004 à 10:14:53 | Re : Resources dans DLL

frederic_bourgouin

Bonjour,
moi aussi j'ai un problème avec les resources dans une dll:
Je ne sais pas comment utiliser une dialogbox(non modale) dans une dll Win32. La dll en elle même fonctionne puisque le debugger entre dans les fonctions exportées:
TEST_DLL1_API int fnTest_Dll1(void);
TEST_DLL1_API BOOL AboutBox (HINSTANCE hInstanceL, HWND hWndParentL);
(pour cela, j'ai ajouté le .lib, la dll et les headers des fonctions exportées dans le projet win32 utilisant la dll)
mais je souhaiterais que la fonction AboutBox(...) créé une boite de dialogue. J'utilise la fonction createdialog avec le nom de la resource dans la dll mais le getlastError récupère toujours l'erreur 0x0716=>code 1814=>ERROR_RESOURCE_NAME_NOT_FOUND.
ce code source n'est probablement pas adapté à ce que je veux faire mais si quelqu'un peut m'aider ....
merci d'avance
fred

=========================================================================
Sources de la dll
test_Dll1.h

// The following ifdef block is the standard way of creating macros which make exporting
// from a DLL simpler. All files within this DLL are compiled with the TEST_DLL1_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see
// TEST_DLL1_API functions as being imported from a DLL, wheras this DLL sees symbols
// defined with this macro as being exported.
#ifdef TEST_DLL1_EXPORTS
#define TEST_DLL1_API __declspec(dllexport)
#else
#define TEST_DLL1_API __declspec(dllimport)
#endif

// This class is exported from the test_Dll1.dll
class TEST_DLL1_API CTest_Dll1 {
public:
CTest_Dll1(void);
// TODO: add your methods here.
};

TEST_DLL1_API HINSTANCE hInstance;
TEST_DLL1_API HWND hWndParent;

extern TEST_DLL1_API int nTest_Dll1;

TEST_DLL1_API int fnTest_Dll1(void);
TEST_DLL1_API BOOL AboutBox (HINSTANCE hInstanceL, HWND hWndParentL);
TEST_DLL1_API LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);


test_Dll1.cpp

// test_Dll1.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include "test_Dll1.h"
#include "resource.h"

HWND hwndInterf;


BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

// This is an example of an exported variable
TEST_DLL1_API int nTest_Dll1=0;

// This is an example of an exported function.
TEST_DLL1_API int fnTest_Dll1(void)
{
return 42;//test de valeur renvoyee
}

// This is the constructor of a class that has been exported.
// see test_Dll1.h for the class definition
CTest_Dll1::CTest_Dll1()
{
return;
}



/*~--------------------------------------------------------------------------------|
| Nom de la fonction : |
| LRESULT CALLBACK test1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) |
| |
|----------------------------------------------------------------------------------|
| Description : |
|----------------------------------------------------------------------------------|
| Date | Version | Intitule | Nom de l'Auteur | Date qualif.|
|----------|---------|-------------------------|---------------------|-------------|
| 05/03/04 | 1.0 | | BOURGOUIN | |
|----------------------------------------------------------------------------------|
| Visa de qualification: |
| |
| |
| Commentaire : |
| Message handler for dialog box. |
-----------------------------------------------------------------------------------*/
LRESULT CALLBACK test1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
int result=0;

switch (message)
{
case WM_INITDIALOG:
return TRUE;
break;

case WM_COMMAND:
if (LOWORD(wParam) == IDCANCEL)
{ EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}

if (LOWORD(wParam) == IDOK)
{
}
break;
}
return FALSE;
}


TEST_DLL1_API BOOL AboutBox (
HINSTANCE hInstanceL, HWND hWndParentL
)
{ int erreur=0;
hInstance=hInstanceL;
hWndParent=hWndParentL;

MessageBox(NULL,"Coucou","About Box",MB_OK); //ça c'est OK
hwndInterf= CreateDialog(hInstance,/*(LPCTSTR)IDD_ABOUTBOX*/MAKEINTRESOURCE(101) //ici ya un soucis
,0,(DLGPROC)About);
erreur=GetLastError();
ShowWindow(hwndInterf,SW_SHOW );
return 1;
}



// Mesage handler for about box.
TEST_DLL1_API LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}


======================================================================================
Projet win32 utilisant la dll:

// Test_UtiliseDll1.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "resource.h"
#include "Test_UtiliseDll1.h"

#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text

// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);


HINSTANCE hinstLib;


HWND hwndx;

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;

// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_TEST_UTILISEDLL1, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_TEST_UTILISEDLL1);


// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return msg.wParam;
}




// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage is only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_TEST_UTILISEDLL1);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDC_TEST_UTILISEDLL1;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

return RegisterClassEx(&wcex);
}

//
// FUNCTION: InitInstance(HANDLE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

//
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;

int itest;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message)
{
case WM_CREATE:
itest=fnTest_Dll1();
AboutBox(hInst, hWnd);
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{ case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
FreeLibrary(hinstLib);
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
// Free the DLL module.
FreeLibrary(hinstLib);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}






Cette discussion est classé dans : problème, dll, mfc, resources, contenue


Répondre à ce message

Sujets en rapport avec ce message

Problème dans un projet ATL COM avec DLL et MFC. [ par jamais34 ] Bonjour, j'ai un problème dans un project ATL COM de type DLL qui supporte les MFC. Après avoir ajouté un object ATL de type "Property Page" (dans la MFC qui ne ce lance pas [ par TheDoK666 ] Bonjour,voila j'ai fait une MFC, celle ci fonctionne et passe a la compile lorsque je la lance (avec visual C++ 2005).Le problème c'est que je veux la Problème de librairie MFC4UD.DLL [ par vaniweb ] Bonjour,J'ai tenté d'exécuter l'exemple Wordpad fourni dans le CD-Rom de VisualC++6 IntroductoryMais il ne trouve pas la librairie MFC4UD.DLLJ'ai trou appeler des ressources depuis une dll VC++6 sans MFC [ par raoulman ] Bonjour, J'ai crée une dll qui contient des ressources (menu, raccourcis claviers, image pour bouton barre d'outils) J'appelle ma dll avec un LoadLi Utiliser une dll managée sur un application MFC [ par billou_13 ] Tout est dans le titre ...Ayant développé un dll managée en C++ .Net, je voudrais savoir s'il est possible de l'utiliser dans une application MFC (C++ Problème MFC et Tableau [ par ZeKalou ] Bonjour,Alors j'ai un petit problème j'utilise Visual Studio C++ 6.0 et je dois faire une interface graphique en MFC et j'aurais besoin d'un type de t Mfc qui ne se lance pas [ par niou42 ] Bonjour a tous et a toutesvoila j'ai une application MFC et je veux la faire fonctioner mais sans Visual C++ 2005Le problème c'est lorsque je lance l' listbox - MFC [ par bibi4096 ] Bonjours à tous, J'espère que quelqu'un pouar m'aider à ressoudre mon petit problème, qui est très simple d'ailleur. Ma question est comment écrire u CListBox MFC : problème avec la HScrollBar [ par lisandru ] Bonjour à tous,alors voilà je je créé une ClistBox que j'implémente avec des noms de fichiers.Jusque là pas de problème.Je n'arrive pas à déplacer le Problème avec une Dll [ par nicooooo1 ] Bonjour, J'ai fait une Dll c++ que j'utilise sous VB6 sans problèmes, par contre lorsque je l utilise en c++ gros plantage........ Voilà un bout de co


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version


HTC Magic

Entre 429€ et 429€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,874 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.