Nur 32 bit lib? Fehler in x64 Program

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von xd-franky-5.

    Nur 32 bit lib? Fehler in x64 Program

    Hi Forum,

    ich hatte eine "unzureichender Speicher" Fehlermeldung als meine Applikation 1GB laut Task Manager benutzt hat.
    Nach einer kurzen Suche habe ich dann wohl den Fehler gefunden und habe in den Erweiterten Compilereinstellungen die Ziel-CPU auf x64 gestellt.

    Nun kommen an Stellen, die in der x86 Version funktionierten Fehlermeldungen Class not registered (für mehr infos siehe Spoiler).
    Ich kann es mir so erklären, dass die Verwendete Schnittstelle nur eine 32 bit Variate besitzt. Ist das so?

    Vielen Dank im Voraus
    VG Tukuan

    Spoiler anzeigen
    System.Runtime.InteropServices.COMException wurde nicht von Benutzercode behandelt.
    ErrorCode=-2147221164
    HResult=-2147221164
    Message=Retrieving the COM class factory for component with CLSID {679F3C3D-232F-11D3-B461-00A024BEC59F} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    Source=mscorlib
    StackTrace:
    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at System.Activator.CreateInstance(Type type)
    at PowerQualityAnalysis.UVRTMeasurement.AllFilesConvertedWorker() in E:\40_Software\10_____PQA\00_PQA_Sourcen\PowerQualityAnalysis\UVRT\UVRTMeasurement.vb:line 1594
    InnerException:

    Tukuan schrieb:

    32 bit
    Du hast Dir einen Verweis in Dein Projekt gezogen.
    Erforsche bitte, ob diese DLL für AnyCPU, x86 oder x64 erstellt wurde
    oder
    falls sie für AnyCPU erstellt wurde, ob es weitere spezifische x86- und x64-DLLs gibt, die Du dann spezifisch Deinem Projekt hinzufügen müsstest.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Moin Forumj,

    danke für die Antworten... Hab ein wenig Nachgeforscht. Die dll gibt es nur in der 32 bit Variante... Wie befürchtet.

    Aber kann ein Programm nicht größer als 1GB werden - 2^32 sind doch 4 GB? Oder wo ist mein Gedankenfehler...

    VG
    Tukuan
    Servus,

    ein 32 bit Programm kann maximal 2GB unter Windows Verwalten. Ist eine Einschränkung von Windows.

    Wie viel RAM ist denn noch frei wenn die Fehlermeldung erscheint? Ist eine HDD voll?
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.
    @MrTrebron Sicher? Hast Du dazu eine Quelle? Denn normal gehen unter 32 Bit ja maximal 4GB (2^32) und ich frage mich wirklich, ob Windows bei x86 deshalb da eine Grenze eingebaut hat, wie viel RAM allokiert werden darf.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Hi

    da ich gerade nur Mobil unterwegs bin eher nicht.
    MDBs haben die gleiche Beschränkung.
    In der Software Firma in der ich gearbeitet habe, haben wir den Kunden als Grenzwert für das Monitoring zu 1,8 GB geraten.

    Edit: wenn ich mich gerade nicht irre geht das auf die Einschränkungen von FAT16 zurück

    Noch einmal Edit: blog-it-solutions.de/windows-3gb-switch-32bit-systeme/
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrTrebron“ ()

    MrTrebron schrieb:

    Einschränkungen von FAT16
    Die Einschränkung kommt vom Memorymanagement in Windows.
    Im ursprünglichen Design waren die oberen 2 GB für das System reserviert und statisch verfügbar.
    Die unteren 2GB sind für die Anwendungen verfügbar und unterliegen dem Context-Switch.

    Später konnte das Verhalten dann aufgeweicht werden, aber das Standardverhalten ist immer noch gleich.
    Für Interessierte: msdn.microsoft.com/en-us/libra…op/aa366778(v=vs.85).aspx
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Tukuan schrieb:

    dass die HDD recht voll ist
    Was immer auch "recht voll" bei dir bedeutet.
    Volle Platten sind nie gut, aber das einzige, was Platte und Memory verbindet, ist das Pagefile und das ist statisch vorreserviert.

    Deswegen könnte mit "unzureichender Speicher" auch der Plattenplatz gemeint sein.
    Aber dazu müsstest du vielleicht einfach mal eruieren, bei welchem Call dieser Fehler auftaucht.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ja, weiß ich eigfentlich auch... Hätte nicht daran gedacht, dass es mit der Platte zu tun haben könnte, da:
    das Pagefile und das ist statisch vorreserviert.

    Ich habe mal aufgeräumt... Nun sind wieder ein paar GB auf der Platte frei. Es waren nur noch 400 MB oder so. Blöde Temporären Dateien (40GB!).

    Aber nun geht es wieder... Vielen Dank an euch...

    MrTrebron schrieb:

    ein 32 bit Programm kann maximal 2GB unter Windows Verwalten. Ist eine Einschränkung von Windows.


    Ist so nicht richtig.

    Ein 32-Bit Betriebssystem kann einer Anwendung nur ca. 2 GB als Arbeitsbereich zu weisen.
    Eine 32-Bit Applikation auf einem 64-Bit Betriebssystem kann durchaus mehr Pages als 2GB benutzen, nämlich wie oben schon erwähnt 2^32.
    @OMA
    Wer lesen kann ist klar im Vorteil.

    Ich habe den Beitrag von @petaod nach meinem Kommentar bereits als Hilfreich eingestuft.
    Wenn man dem Link folgt und bei MS nachliest sieht man auch das es per Default die 2GB sind.

    Man kann das Ganze erweitern. Das ist wohl richtig.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.