Wat ik nu weer aan men fiets heb hangen.. Ik krijg constant op een bepaald stuk code de exceptie BadImageFormatException. Wat zoeken naar de mogelijke oorzaak verteld mij dat je deze exceptie krijgt op het moment dat je een assembly probeert in te laden als managed clr terwijl deze dat niet is. Probleem is echter dat ik geen code uit een andere assembly gebruik op dat punt. Verder gezoek op google verteld me dat er dit voorkomt bij het laden van een assembly die niet de juiste versie van de runtime support. Ik zit in dezelfde assembly dus dit lijkt me niet van toepassing. Verder vindt ik helemaal niets dat me kan helpen.
Dit is wat ik doe: Ik roep een method in een bepaald object voor de eerste keer aan (de rest van het programma loopt al een tijdje) en gelijk krijg ik deze exceptie, men uiteindelijke vermoeden is dat de jit over zen nek gaat en deze exceptie naar buiten knalt. Toen ben ik maar eens wat code gaan uitdocumenteren om zo het stuk code te vinden dat ervoor zorgt dat het fout loopt.
Als ik dit stuk uitdocumenteer dan werkt het gewoon:
De method LoadPageList() is het niet, die word ergens anders vrolijk gebruikt. Ook al het ander spul word overal door het programma heen zonder enig probleem gebruikt. Het lijkt gewoon allemaal goed, ook tijdens compilatie krijg ik geen enkele error of warning. De debugger knalt gewoon eruit met de exceptie op het moment van aanroepen van de method. (neem aan dat ie dan gejit wordt).
Iemand enig idee wat de oorzaak van BadImageFormatException in deze method kan zijn? Ben ten einde raad.
Dit is wat ik doe: Ik roep een method in een bepaald object voor de eerste keer aan (de rest van het programma loopt al een tijdje) en gelijk krijg ik deze exceptie, men uiteindelijke vermoeden is dat de jit over zen nek gaat en deze exceptie naar buiten knalt. Toen ben ik maar eens wat code gaan uitdocumenteren om zo het stuk code te vinden dat ervoor zorgt dat het fout loopt.
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
| bool Document::ExportFields(Command^ pCmd, bool bIncludePageData) { if(pCmd == nullptr) return false; pCmd->AddField(VortexCommandField::DOCNR,iDocNr); /* database fields */ if(!LoadDBFields()) return false; pCmd->AddField(VortexCommandField::ARCHIVELOCATION, iArchiveLocation); pCmd->AddField(VortexCommandField::OWNER, iOwner); pCmd->AddField(VortexCommandField::SENDER, iSender); pCmd->AddField(VortexCommandField::DOCTYPE, iDocType); pCmd->AddField(VortexCommandField::DESCRIPTION, sDescription); pCmd->AddField(VortexCommandField::UPDATEBY, iUpdateBy); pCmd->AddField(VortexCommandField::DOCDATE, dtDocDate); pCmd->AddField(VortexCommandField::RECDATE, dtRecDate); pCmd->AddField(VortexCommandField::DONEDATE, dtDoneDate); pCmd->AddField(VortexCommandField::UPDATED, dtUpdate); pCmd->AddField(VortexCommandField::CREATED, dtCreated); /* page information */ if(LoadPageList() && (aPage->Count > 0)) { Text::StringBuilder^sb = gcnew Text::StringBuilder(aPage->Count * 7); Monitor::Enter(aPage); try { for each(Generic::KeyValuePair<int,Page^>^ kvp in aPage) { sb->Append(kvp->Key.ToString()); sb->Append(","); sb->Append(kvp->Value->FileNr.ToString()); sb->Append(";"); } pCmd->AddField(VortexCommandField::PAGELIST, (sb->Length == 0) ? "" : sb->ToString()); } finally { Monitor::Exit(aPage); } } else { pCmd->AddField(VortexCommandField::PAGELIST,""); } /* Page data*/ if(bIncludePageData) { LoadPages(); /* voor elke pagina in dit document */ for each(Generic::KeyValuePair<int,Page^>^ kvp in aPage) { /* maak een reply met page-data */ Command^ pCmdRep = gcnew Command(); pCmdRep->CommandId = VortexCommand::GET_PAGE_INFO; pCmdRep->Type = VortexCommandType::REPLY; /* export page fields & data */ kvp->Value->ExportFields(pCmdRep); /* voeg toe aan het basis command */ pCmd->AddChildCommand(pCmdRep); } } return true; } |
Als ik dit stuk uitdocumenteer dan werkt het gewoon:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| /* page information */ if(LoadPageList() && (aPage->Count > 0)) { Text::StringBuilder^sb = gcnew Text::StringBuilder(aPage->Count * 7); Monitor::Enter(aPage); try { for each(Generic::KeyValuePair<int,Page^>^ kvp in aPage) { sb->Append(kvp->Key.ToString()); sb->Append(","); sb->Append(kvp->Value->FileNr.ToString()); sb->Append(";"); } pCmd->AddField(VortexCommandField::PAGELIST, (sb->Length == 0) ? "" : sb->ToString()); } finally { Monitor::Exit(aPage); } } else { pCmd->AddField(VortexCommandField::PAGELIST,""); } |
De method LoadPageList() is het niet, die word ergens anders vrolijk gebruikt. Ook al het ander spul word overal door het programma heen zonder enig probleem gebruikt. Het lijkt gewoon allemaal goed, ook tijdens compilatie krijg ik geen enkele error of warning. De debugger knalt gewoon eruit met de exceptie op het moment van aanroepen van de method. (neem aan dat ie dan gejit wordt).
Iemand enig idee wat de oorzaak van BadImageFormatException in deze method kan zijn? Ben ten einde raad.