Probleme mit .NET DLL



  • Hallo.

    Vorneweg, ich habe gerade erst mit C# angefangen.

    Also, ich wollte gleich mal ein Projekt starten und ich nutze eine C++/CLI DLL, welche zumindest bei anderen gut funktioniert.

    Jedoch bekomme ich diese Runtime exception:

    Unhandled Exception: System.BadImageFormatException:
    Could not load file or assembly 'fasmdll_managed, Version=1.0.3262.20709, Culture=neutral, PublicKeyToken=null' or one of its dependencies.
    An attempt was made to load a program with an incorrect format.
    File name: 'fasmdll_managed, Version=1.0.3262.20709, Culture=neutral, PublicKeyToken=null'
    

    Hier hab ich mal die DLL mit Source hochgeladen: http://filebeam.com/5e546a1b4a48f8ad5057d8ace51280d6

    Falls es von Relevanz ist, ich benutze VC# 2008, erzeuge also .NET 3.5 Assemblies, habe allerdings .NET 4 Beta installiert.

    Danke schonmal. 🙂
    Grüße



  • Vermischt du vielleicht 32 und 64 Bit Code?



  • bkk schrieb:

    Vermischt du vielleicht 32 und 64 Bit Code?

    Möglich. Wo stell ich in VC# die Zielplattform ein?


  • Administrator

    Icematix schrieb:

    bkk schrieb:

    Vermischt du vielleicht 32 und 64 Bit Code?

    Möglich. Wo stell ich in VC# die Zielplattform ein?

    1. Rechtsklick im Solution Explorer auf das Projekt
    2. Properties auswählen
    3. Im erscheinenden Fenster auf Build gehen (seitlich)
    4. Platform target von Any CPU auf x86 oder x64 umstellen

    Grüssli



  • Danke, dort habe ich es auch vermutet, aber es ist nicht da oO

    Bin ich blind oder was?
    http://i48.tinypic.com/wjz7sw.jpg

    Komme mir gerade echt blöd vor, in VC++ konnte ich die CLI-Dll problemlos auf verschiedene Plattformen umstellen.


  • Administrator

    Verdacht gehabt beim Bild und der hat sich bestätigt. Die Express Edition bietet keine solche Option an. Du kannst es aber manuell über das *.csproj File ändern gehen.

    Irgendwo in diesem File gibt es Konfigurationsangaben. Zum Beispiel sowas für die Debug-Einstellung:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    

    Als Childelement von diesem Element fügst du folgendes ein:

    <PlatformTarget>x86</PlatformTarget>
    

    Wobei du eine der drei Möglichkeiten angeben kannst:
    x86
    x64
    Itanium

    Wenn du das Childelement weglässt, dann nimmt es die Option "AnyCPU".

    Somit könnte es zum Beispiel am Ende so aussehen:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <DebugSymbols>true</DebugSymbols>
        <DebugType>full</DebugType>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>
        <DefineConstants>DEBUG;TRACE</DefineConstants>
        <ErrorReport>prompt</ErrorReport>
        <WarningLevel>4</WarningLevel>
        <PlatformTarget>Itanium</PlatformTarget>
      </PropertyGroup>
    

    Grüssli



  • Danke...da hat MS aber ziemlich gehackt 😉
    Naja, jetzt läufts.



  • Hallo,

    die Option der Zielplattform kann Du unter
    "Extras/Optionen/Projekte-und Projektmappen/Erweiterte Buildkonfigurationen anzeigen"
    aktivieren und im Anschluß über die GUI konfigurieren.

    Gruß
    foo


Anmelden zum Antworten