Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Irriterande krash i dll som har MFC som shared

Postades av 2008-05-16 13:47:29 - Markus Wallén, i forum c++, Tråden har 6 Kommentarer och lästs av 1593 personer

Hej,

Har ett gäng dller som jag "jackar in" i mitt program. Har precis ändrat så att de ska stödja unicode, då har plötsligt en av dllerna slutat att fungera.

När jag anropar AFX_MANAGE_STATE(AfxGetStaticModuleState()) i början på en funktion i en av dllerna så verkar det som att den misslyckas med att göra vad den nu gör.


Båda min dller ropar på följande funktion:
HRESULT CPictureWnd::LoadResource(WORD wId, LANGID wLangId) {
LPCTSTR sTemplateName = MAKEINTRESOURCE(wId);
HINSTANCE hInst = AfxFindResourceHandle(sTemplateName, _T("GIF_IMAGE"));

HRSRC hResInfo = ::FindResourceEx(hInst, _T("GIF_IMAGE"), sTemplateName, wLangId);
if (!hResInfo) hResInfo = ::FindResourceEx(hInst, _T("GIF_IMAGE"), sTemplateName, 0x409);

HGLOBAL hResource = ::LoadResource(hInst, hResInfo);

DWORD dwSize = ::SizeofResource(hInst, hResInfo);
if (!hResource || dwSize <= 0) return E_FAIL;
LPVOID pvResourceData = ::LockResource(hResource);
if (!pvResourceData) return E_FAIL;

HGLOBAL hGlobal = ::GlobalAlloc(GMEM_MOVEABLE, dwSize);
if (!hGlobal) return E_FAIL;
LPVOID pvGlobalData = ::GlobalLock(hGlobal);
if (!pvGlobalData) return E_FAIL;

memcpy(pvGlobalData, pvResourceData, dwSize);
::GlobalUnlock(hGlobal);

LPSTREAM pStream = NULL;
HRESULT hr = ::CreateStreamOnHGlobal(hGlobal, TRUE, &pStream);
if (FAILED(hr) || !pStream) return hr;

if (m_pPicture) m_pPicture->Release(), m_pPicture = NULL;
hr = ::OleLoadPicture(pStream, dwSize, FALSE, IID_IPicture, (LPVOID *)&m_pPicture);
pStream->Release();

if (m_hWnd) Invalidate();

return hr;
}

När den ena ropar på detta vis:
CTM_MODULE_API BOOL module_mtype_init(LPMODULE_MTYPE_DATA mtype)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
mtype->pUserData = (_MODULE_MTYPE_USER_DATA*)calloc(sizeof(_MODULE_MTYPE_USER_DATA),1);
mtype->pUserData->m_picIcon = new CPictureWnd;
mtype->pUserData->m_picIcon->LoadResource(IDB_PATHICON,mtype->langId);
return TRUE;
}

Funkar det utmärkt.
När den andra dll:en försöker göra samma sak:
CTM_MODULE_API BOOL module_mtype_init(LPMODULE_MTYPE_DATA mtype)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
mtype->pUserData = (_MODULE_MTYPE_USER_DATA*)calloc(sizeof(_MODULE_MTYPE_USER_DATA),1);
mtype->pUserData->m_picIcon = new CPictureWnd;
mtype->pUserData->m_picIcon->LoadResource(IDB_PATHICON,mtype->langId);
return TRUE;
}

Så får jag en krasch, eller en debug assertion failed, i den gemensamma koden på denna raden:
HINSTANCE hInst = AfxFindResourceHandle(sTemplateName, _T("GIF_IMAGE"));

Nån som har en aning om vad det är som pågår? Mycket tacksam för hjälp då jag suttit med det här ett ganska bra tag och inte har en aning om hur jag ska lösa det.


Svara

Sv: Irriterande krash i dll som har MFC som shared

Postades av 2008-05-16 15:30:11 - Ruben Jönsson

Pekar wId i anropet till LoadResource på en giltig resurs (en GIF_IMAGE) i dll:en och konverteras den rätt med MAKEINTRESOURCE (UNICODE/ANSI)?

/Ruben
www.rjjournal.net



Svara

Sv:Irriterande krash i dll som har MFC som shared

Postades av 2008-05-20 11:32:41 - Markus Wallén

IDB_PATHICON pekar på en giltig GIF i resursen, den gjorde det innan jag uppdaterade koden till Unicode iallafall. :) Kan det ha ändrats där på något sätt?

Hur ser jag om den konverteras rätt med MAKEINTRESOURCE? Konverteras resurserna olika beroende på ANSI/UNICODE?

//Markus


Svara

Sv: Irriterande krash i dll som har MFC som shared

Postades av 2008-05-20 12:34:10 - Ruben Jönsson

Ibland har jag fått problem när jag flyttat runt resurser för lokalisering (inte mellan ansi/unicode dock) och då har det blivit fel i _APS_NEXT_ värdena i slutet av resource.h så att jag har fått fel #define värde på resurs identifierarna.

MAKEINTRESOURCE är ett makro som expanderas till MAKEINTRESOURCEA eller MAKEINTRESOURCEW beroende på om _UNICODE är definierat eller inte. Tänkte om det kanske blivit fel där.

Annars kan du väl stega in i AfxFindResourceHandle med debuggern och se vad som händer. Källkoden till MFC finns ju.

/Ruben
www.rjjournal.net


Svara

Sv:Irriterande krash i dll som har MFC som shared

Postades av 2008-05-20 13:11:09 - Markus Wallén

Verkar som att det är den här koden som strular:
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResourceHandle()
{ ASSERT(afxCurrentResourceHandle != NULL);
return afxCurrentResourceHandle; }

i afxwin1.inl.

hur får jag en giltig afxCurrentResourceHandle? Misslyckas AFX_MANAGE_STATE(AfxGetStaticModuleState()); med att byta? Om jag tar väck den funktionen så fungerar det, men då går den mot fel resurs.

//Markus


Svara

Sv: Irriterande krash i dll som har MFC som shared

Postades av 2008-05-20 23:42:25 - Ruben Jönsson

Jag tror att du kan få det här felet om inte alla dina moduler (dll filer + exe fil) är kompilerade med samma tecken alternativ (ansi/unicode/mbcs).

Är alla dll:er ändrade till Unicode? Tänk på att det är skilnad mellan debug och release (kanske inte alla i release eller i debug versionerna är omkomplilerade).

/Ruben
www.rjjournal.net


Svara

Sv:Irriterande krash i dll som har MFC som shared

Postades av 2008-05-22 11:04:58 - Markus Wallén

Du hade rätt. Det var en libfil som inte var unicode kompilerad som ställde till det. Missade den eftersom kompilatorn inte klagade på den, så jag trodde allt var fine. =)
jaja så kan det gå.

Tack för hjälpen!


Svara

Nyligen

  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino
  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 867
27 962
271 767
494
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies