VS6 DLL in DLL VS8.0 einbinden ?

SunnyBunny

Mitglied
Hallo,

ich benutze VS8, C++, MFC.

Problemstellung, ich habe eine große DLL, die in VS6.0 erstellt wurde, die ich am Besten gar net anrühren will, sondern nur benutzen möchte, diese nenne ich mal fantasievoll "VS6alt.dll".

Im VS6.0 hatte ich mir eine frische DLL erstellt, und diese "VS6alt.dll" als zweites Projekt mit eingebunden. Habe mir ein kleines Aufrufprogramm gebastelt und es funktioniert.

Ich habe diese DLL mit der eingebundenen "VS6alt.dll" in VS8 importiert, und alle Schwierigkeiten beseitigt. Jedoch kann ich meine Funktion aus der DLL komischerweise nicht laden.

Code:
UpdateData(true);
HINSTANCE DLLInst;   
typedef int (Verbinden)(int _DevID,CString _DevToken);
Verbinden* M_Verbinden;
DLLInst=::LoadLibrary("meine.dll"); 
if(DLLInst==NULL)    
{
	MessageBox("(1)Ein Fehler ist beim Laden der DLL aufgetreten!");
	return;    
}

Er springt mir dort schon raus ( = NULL). :(

Habe das gleiche mal ohne die eingebundene "VS6alt.dll" probiert und da funktioniert alles.

Fazit: es liegt an meiner alten "VS6alt.dll", und der Kompiler liefert mir keinen Grund wieso es nicht funktioniert. Wie soll ich nun weiter vorgehen?

Eins noch, wenn ich die Projekte einzeln erstelle, keine Fehler, wenn ich das Projekt komplett neu erstelle, komm im VS8:

1>Project : error PRJ0019: Ein Tool hat einen Fehlercode aus folgender Quelle zurückgegeben: "Postbuildereignis wird ausgeführt..."

Führe ich danach "Projekt erstelle (F7)" durch, gibt es keinen Fehler mehr.

Ähnlich ist es im VS6 nur mit folgendem Fehler:

Fehler beim Ausführen von c:\windows\system32\cmd.exe.

öhm ja ... Hilfe? :confused:
 
Zuletzt bearbeitet:
Hi und danke, hab ich mal eingebaut.

Bekomme: "Das angegebene Modul wurde nicht gefunden" als Meldung. :(

Daraus werde ich ja mal gar nicht schlau.

So ist es aufgebaut:

..\\MeinProjekt\\Debug\\die_dll.dll
..\\MeinProjekt\\Debug\\die_exe_zur_dll.exe

und in der .exe - Datei wird ja wie oben gesehen die DLL dirket aufgerufen, liegt ja im gleichen Verzeichnis.

Kann jemand mit der Fehlermeldung etwas anfangen oder weiss wie ich tiefer recherchieren kann, was genau fehlt?

Nebenbei:
Das mit den cmd - Fehlermeldungen habe ich behoben, da war ein Befehl im PostBuild versteckt, der veraltete Pfadangaben hatte. :)
 
Zuletzt bearbeitet:
Visual Studio hat beim Ausführen das aktuelle Verzeichnis nicht im Debug bzw. Release-Ordner, sondern im Projekt-Hauptverzeichnis. Wenn du die DLL da rein legst, wird sie von LoadLibrary auch gefunden.
 
Hm, nö.

Ich habe die Debug.exe mit dem Load Libary ja nicht aus VS8 ausgeführt, sondern in das Debug Verzeichnis der DLL kopiert.

Dennoch hab ich es mal ausprobiert und die Exe sowie die DLLs zusätzlich dirket in das Projektverzeichnis kopiert, der Aufruf ging dennoch aus beiden Verzeichnissen nicht.

Vielleicht habe ich mich auch blöd ausgedrückt :)
Also nochmal:

Ich habe in meinem Projekt "meine DLL" noch ein weiteres Projekt im Arbeitsbereich, "eine alte DLL".
Ich bin mir nahezu sicher, dass von dieser zweiten mit eingebundenen DLL der Fehler mit dem "Modul nicht gefunden" herrührt, da, wenn ich die zur Zeit benutzen Header von der alten DLL in "meine DLL" rausnehme, das Load Libary funktioniert. :(

Dieses Problem macht mich wahnsinnig. :rolleyes: :confused:
 
Hmm, versuch bitte mal, den absoluten Pfad in LoadLibrary reinzupacken. Wenn dann der Fehler immer noch kommt, dann hat deine alte DLL eine Dependency, die nicht aufgelöst werden kann.

Prüf dann mit dem Dependency Checker (in jeder gut sortierten Visual Studio-Installation mit dabei), ob da irgendwelche DLLs von der alten DLL benötigt werden (ich vermute fast irgendeine alte Runtime-Variante).
 
Danke für Geduld und Hilfe.

Achja, durch das viele Herumprobieren ist mir ein fataler Fehler unterlaufen.
Ich hatte mit anderen DLLs getestet und den Namen nicht zurückgesetzt.

Mein Propblem ist nicht gelößt, aber es stellt sich etwas anders da.

Die Rückgabe von GetLastError() ist nun:

"Die angegebene Prozedur wurde nicht gefunden."

Er springt aber immernoch gleich nach dem Load Libary bei
Code:
if(DLLInst == NULL)
raus.
 

Neue Beiträge

Zurück