Access Violation beim Aufruf einer Methode in DLL

exsa

Grünschnabel
Hallo,
wer kann helfen ?
Ich entwickle eine Anwendung für PocketPC 2003 mit eMbedded Visual C++ 4.0 und benutze dazu eine dll,
die mir u.a. eine Funktion zum Öffnen von Karten (*.shp) und Orthophotos (georeferenziertes *.JPG) zur Verfügung stellt.
Beim Testen hat sich herausgestellt, dass es beim Öffnen von JPGs im Debugger zu folgender Meldung kommt:

First-change exception in <meineAnwendung>.exe: 0xC0000005: Acess Violation

Die Exception tritt an der Stelle auf, an der über die Adresse der Funktion in der Dll, diese Funktion aufgerufen wird:


bool CGeoPADCtrl::GeoPAD1(BSTR filePath)
{
bool (PASCAL *fun1)(BSTR FilePath);
//GetProgAddress liefert Adresse der Funktion in der DLL
(FARPROC&)fun1 = GetProcAddress(hInstasnce,_T("GeoPAD1"));
//Wenn Adresse zurückkommt
if(fun1)
//Ausführen der Funktion in der DLL
return fun1(filePath); <-- hier tritt die Exception auf
//ansonsten Rückgabe von false, d.h. Karte nicht geladen
return false;
}


Kann mir jemand sagen, was der Grund für eine solche Exception sein kann ?
Liegt der Fehler innerhalb der DLL und wenn ja, wie kann ich den dann beheben ?

Bitte antwortet schnell, freue mich über jeden Tipp !

Sandra
 
Code:
 bool (PASCAL *fun1)(BSTR FilePath);
Was tut diese Zeile? Sieht komisch aus. Willst du da einen Funktionspointer definieren? Ich denke schon. Wenn ja, wozu dann FilePath? Ansonsten vermute ich, dass der Fehler nicht im gezeigten Code versteckt ist.

Und immer hübsch Codetags verwenden, bitte!
 
Das kann passieren, wenn

A) die Funktionsdefinition nicht übereinstimmt (also dein Funktionspointer andere Parameter nimmt als die tatsächliche Funktion (bist du sicher mit PASCAL?)
B) Der übergebene Parameter defekt ist
 
Hallo,

danke für die Antworten. Leider bin ich bei diesem Problem noch nicht weitergekommen. Ich habe den Code nicht selbst geschrieben und weiß ehrlich gesagt nicht einmal so genau, was PASCAL bedeutet. Kann mir das jemand erklären. Ansonsten habe ich gerade noch das Problem, dass ich einen BSTR mit CString vergleichen muss. Geht das ? Kann ich CString in BSTR umwandeln oder umgekehrt. Sorry, ist vielleicht eine dumme Frage, aber ich bin ja noch Grünschnabel...
Danke !
 
Zurück