none
Проблемы с присоединением dll, написанной на C++ к проету C# RRS feed

  • Вопрос

  • Здравствуйте уважаемые специалисты, у меня возникла следующая проблема:
    В Borland Turbo C++ 2006 создаю проект dll со следующим кодом:
    //---------------------------------------------------------------------------

    #include <windows.h>

    #pragma argsused
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, LPVOID lpvReserved)
    {
    return 1;
    }
    //---------------------------------------------------------------------------
    extern "C" double __declspec(dllexport) __stdcall MySumm(double n1, double n2){
    return n1 + n2;
    }
    extern "C" double __declspec(dllexport) __stdcall MyMult(double n1, double n2){
    return n1 * n2;
    }
    Затем в Visual Studio 2008 SP1 создаю проект приложения Windows Forms (.NET Framework 3.5) на языке C# со следующим кодом:
    using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace UseMyCppDll
    {
    public partial class Form1 : Form
    {
    [DllImport("ProjectMyDll.dll")]
    public static extern double MySumm(double n1, double n2);
    [DllImport("ProjectMyDll.dll")]
    public static extern double MyMult(double n1, double n2);
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    lbl1.Text = "Сумма: " + MySumm(Convert.ToDouble(txt1.Text), Convert.ToDouble(txt2.Text)).ToString();
    }

    private void button2_Click(object sender, EventArgs e)
    {
    lbl1.Text = "Произведение: " + MyMult(Convert.ToDouble(txt1.Text), Convert.ToDouble(txt2.Text)).ToString();
    }
    }
    }
    В момент обращения к любой из функций, вызываемых из dll, выдается следующее сообщение:
    "BadImageFormatException не обработано.
     Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)"

    Не могли бы подсказать, из-за чего возникает данное исключение и как его устранить?
    14 марта 2010 г. 10:38

Ответы

  • Скорее всего ОС 64 битная и C# приложение автоматически запускается в 64 битном режиме. Загрузка 32 битных DLL при этом невозможна.

    Следует либо компилировать DLL для 64 бит, либо пометить C# проект как 32 битный.
    This posting is provided "AS IS" with no warranties, and confers no rights.
    • Помечено в качестве ответа eCStazy74 15 марта 2010 г. 10:40
    14 марта 2010 г. 19:05
    Модератор

Все ответы

  • Скорее всего ОС 64 битная и C# приложение автоматически запускается в 64 битном режиме. Загрузка 32 битных DLL при этом невозможна.

    Следует либо компилировать DLL для 64 бит, либо пометить C# проект как 32 битный.
    This posting is provided "AS IS" with no warranties, and confers no rights.
    • Помечено в качестве ответа eCStazy74 15 марта 2010 г. 10:40
    14 марта 2010 г. 19:05
    Модератор
  • Действительно, ОС x64, запустил проект как x86 и всё заработало, спасибо.
    15 марта 2010 г. 10:43