Compiler Problem error C2440 VS 2005 SP1
-
Hi!
Danke erstmal für deine Antwort!
Das Problem besteht leider nach wie vor.
Möglichkeit 1 habe ich durchgeführt -> keine Änderung
Möglichkeit 2: Es gibt kein#import "...\msjro.dll"
im gesamten Project wo ich etwas ersetzen könnte..
Achja, es wird auch kein
error C4772: #import referenced a type from a missing type library;
ausgegeben, nur eben der im ersten Post gezeigte Fehler.
-
Wo kommt das msjro.tli File dann her?
Wird das direkt mit #include reingeholt, oder ...?
-
Hi,
habe jetzt folgendes in der BaseDef_v8 gefunden:
#pragma warning (disable: 4146) // CG : In order to use this code against a different version of ADO, the appropriate // ADO library needs to be used in the #import statement //#pragma message ("Make sure you go to Tools.Options.Directories.Library files and add the paths to msado15.dll and msjro.dll will usually be in C:\\Program Files\\Common Files\\System\\ado") //#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "EndOfFile") //#import "C:\Program Files\Common Files\System\ado\MSJRO.DLL" no_namespace rename("ReplicaTypeEnum", "_ReplicaTypeEnum") #import <..\..\commonlib\ado\msado15.dll> rename("EOF", "EndOfFile") #import <..\..\commonlib\ado\MSJRO.DLL> no_namespace rename("ReplicaTypeEnum", "_ReplicaTypeEnum") using namespace ADODB;
und entsprechend geändert
#pragma warning (disable: 4146) // CG : In order to use this code against a different version of ADO, the appropriate // ADO library needs to be used in the #import statement //#pragma message ("Make sure you go to Tools.Options.Directories.Library files and add the paths to msado15.dll and msjro.dll will usually be in C:\\Program Files\\Common Files\\System\\ado") #import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "EndOfFile") #import "C:\Program Files\Common Files\System\ado\MSJRO.DLL" no_namespace rename("ReplicaTypeEnum", "_ReplicaTypeEnum") #import <..\..\commonlib\ado\msado15.dll> rename("EOF", "EndOfFile") #import <..\..\commonlib\ado\MSJRO.DLL> no_namespace rename("ReplicaTypeEnum", "_ReplicaTypeEnum") using namespace ADODB;
sowie den ornder zu den library-files angegeben.
Nun bekomme ich folgende Fehlermeldung(en):
c:\mkz-source\mkzsource\intermediate\basedef\debug\msjro.tli(115) : error C2440: 'return' : cannot convert from '__missing_type__ *' to '__missing_type__' There is no context in which this conversion is possible c:\mkz-source\mkzsource\projects\basedef\include\ado2.h(46) : error C4772: #import referenced a type from a missing type library; '__missing_type__' used as a placeholder c:\mkz-source\mkzsource\projects\basedef\source\ado2.cpp(73) : error C2664: 'IJetEngine::RefreshCache' : cannot convert parameter 1 from 'ADODB::_Connection *' to '__missing_type__ *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
-
OK.
Hab' gerade in einem meiner Programme nachgesehen.
MS hat da mal ADO Interfaces umbenannt, was zu einem Haufen Problemen führen kann.
U.a. war davon auch das_Recordset
Interface betroffen. Das alte_Recordset
wurde zu_Recordset_Deprecated
umbenannt, und dafür ein neues_Recordset
Interface (mit ner neuen IID) definiert.
Informationen dazu findest du hier: http://qa.social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/3a4ce946-effa-4f77-98a6-34f11c6b5a13
Die alten IIDs fangen mit00000xxx
an, die neuen mit00001xxx
.BTW: mit den Versionen der
msado15.dll
undMSJRO.DLL
die ich auf meinem PC habe (Windows 7 x64 SP1, aktueller Patch-Level), funktionieren die von dir gezeigten#import
Anweisungen problemlos -- also die ursprüngliche Version!Es könnte sein dass deine
msado15.dll
noch die alten Interface-Definitionen hat, deineMSJRO.DLL
aber die neuen erwartet. (So ist es zumindest bei mir, also dieMSJRO.DLL
referenziert die neuen Interfaces, sie geht nicht mit den alten!)Guck mal mit OLEView unter "Interfaces" nach welche/wie viele Interfaces namens "_Recordset" dort definiert sind und was die für ne IID haben.
Oder versuch' mal
#import "C:\Program Files\Common Files\System\ado\msado15.dll" rename("EOF", "EndOfFile") #import <..\..\commonlib\ado\MSJRO.DLL> no_namespace rename("ReplicaTypeEnum", "_ReplicaTypeEnum") using namespace ADODB;
Und auf jeden Fall immer nur eine Version des selben Files über
#import
einbinden, niemals#import
auf das selbe File aus zwei verschiedenen Verzeichnissen so wie du das gezeigt hast.Wenn das auch nicht funktioniert kannst du auch z.B. versuchen die
msado20.tlb
statt dermsado15.dll
zu verwenden.Ich würde dir aber empfehlen jemanden der mit dem Projekt vertraut ist zu Rate zu ziehen.
Denn eigentlich sollte das Projekt sich mit den in eurem Source-Control untercommonlib\ado
eingecheckten File-Versionen compilierbar sein!
-
Hi,
erstmal vielen Dank für deine Mühe! Leider haben mich die Tips nicht zum Erfolg gebracht.
Ich habe das ganze jetzt mal auf einem Win7 HP 32bit - System ausprobiert, und siehe da: Der Build war erfolgreich
Verstehen tue ich das ganze leider nicht... aber vll ist das ja eine Hilfe für diejenigen die auch mal auf das Problem stoßen.Gruß, Bartolomeus76
-
Was für ein OS ist/war es denn mit dem du die Probleme hast/hattest?
Vielleicht müssen wirklich die neuen TLBs im System registriert sein.
-
-Visual Studio 2005 SP1, Win XP SP3
-
Ah I C
Hau weg den Scheiss!
Ansonsten müsste es gehen die vom Compiler durch
#import
generierten Files mit zu committen und dann abzuspeichern.
Das wäre mMn. die sicherste Variante um sich gegen Änderungen/Unterschiede in Type Libraries zu schützen.
Damit sollte es dann auch wieder möglich sein das Projekt unter XP zu bauen.
-
Hehe.. ja. Habe mir nur gedacht VS2005 läuft unter XP vernünftig, unter Win7 64bit ist der Compiler immer abgestürzt. Naja, alles nur auf ner virtuellen Maschine. Und Ziel ist ja erreicht
Danke nochmal!
-
Bartolomeus76 schrieb:
Habe mir nur gedacht VS2005 läuft unter XP vernünftig, unter Win7 64bit ist der Compiler immer abgestürzt.
Die meisten unserer Projekte verwenden noch VS2005 und wir arbeiten alle mit Win7 64 Bit.
Du musst halt das letzte Service Pack sowie das "Vista Update" für VS2005 installieren - dann geht das aber recht gut. Auf jeden Fall nicht schlechter als unter XP.