none
Compile on 32 bits and run on 64 bits platform RRS feed

  • Discussion générale

  • Hi, I use a PDFCreatorPilot (references 32 bits) on my developpement machine (XP 32 bits - VS2010 - .Net4) to compile my application (AnyCPU). All run corectly.

    I want to run this program on a windows 2008 64 bits server with the PDFCreatorPilot 64 bits (or by default with 32bits) but I have error : System.BadImageFormatException : Could not load file or assembly 'Interop.PDFCreatorPilotLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.

    When a install my PDF component, I try with the 32 and the 64 bits version, i have always have the same error. Path of the DDL is "C:\Program Files (x86)\PDF Creator Pilot" on server 2008  and "C:\Program Files\PDF Creator Pilot" on my developpement machine.

    How can I add reference to make my program found the DLL on two different plateform (32 and 64) ?

    Is it possible to run my program on 32 bits plateform and use the 32 bits DLL version and run the same assembly on 64 bits plateform and run 64 bits DDL version ?

    Thanks.

    mardi 24 janvier 2012 09:14

Toutes les réponses

  • Bonjour,

    Normalement si tu as mis ANY CPU  l'ensemble des projets que porte ta solution tu n'as pas besoins se spécifier de mettre 32 ou 64 bits.Sinon tu peux essayer de loader et gérer dynamiquement cette  dll (assemby) dans ton code behind .

    Cordialement

     

     

     


    So B
    mardi 24 janvier 2012 09:33
  • J'ai bien mis AnyCpu et ça ne marche pas.

    J'ai installé la version 32 bits de mon composant sur le serveur 2008 64 bits et ça ne marche pas non plus, j'ai la toujours la même erreur. Le framework  offre forcément la fonctionnalité de retrouver les composants sur des architectures différentes ?

    mardi 24 janvier 2012 10:05
  • À mon avis, il faut justement forcer en 32 bits. Sinon le programme
    démarre en 64 bits et essaie par la suite de charger une dll qui est en
    32 bits.
    En attendant un avis d'expert sur la question...
     
    Le 24/01/2012 11:05, Fred OT a écrit :
    >
    > J'ai bien mis AnyCpu et ça ne marche pas.
    >
    > J'ai installé la version 32 bits de mon composant sur le serveur 2008
    > 64 bits et ça ne marche pas non plus, j'ai la toujours la même erreur.
    > Le framework  offre forcément la fonctionnalité de retrouver les
    > composants sur des architectures différentes ?
    >
     

    Fred
    mardi 24 janvier 2012 14:42
  • Bonjour,

    Si votre composant est un objet COM, ActiveX ou une DLL native Windows en 32-bit, vous devez compiler et exécuter votre application en 32-bit (même dans un environment 64-bit).
    En procédant ainsi, vous forcer votre application à s'exécuter en 32-bit et donc à utiliser des composants COM/Natifs.

    Si vous utilisez Any CPU, votre application sera exécuté en 32-bit dans un environnement 32-bit et 64-bit dans un environment 64-bit. Dans le dernier cas, votre application ne pourra pas utiliser les composants COM/Natifs qui sont installé en 32-bit.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 24 janvier 2012 22:18
    Modérateur
  • Ok Gilles merci pour votre réponse.

    En réalité, j'ai deux versions de mon composant, une en 32 et une en 64. Sur les serveurs de production, je souhaiterais de préférence utiliser la version 64 bits puisque c'est du server 2008, je souhaiterais également que les clients utilisent eux du 32 bits puisqu'ils sont en XP 32 bits.

    L'idéal aurait été que mon application compilé en AnyCPU tourne en 64 sur les serveurs et en 32 sur les clients depuis les mêmes assembly. Cela est-il possible ?

     

    Savez vous si le fichier Interop.moncomposant.dll, créer lors du référencement d'un DLL, contient le chemin d'accès à cette DLL ?

    mercredi 25 janvier 2012 07:17
  • Bonjour,

    Vous pouvez compiler et déployer une version en Any CPU du moment que vous installez les composant sous la bonne plateforme (64-bit pour un OS 64-bit et 32-bit pour un OS 32-bit).

    Savez vous si le fichier Interop.moncomposant.dll, créer lors du référencement d'un DLL, contient le chemin d'accès à cette DLL ?
    Non.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mercredi 25 janvier 2012 10:02
    Modérateur