C ++ / CLI Dll с проблемой взаимодействия C #

У меня есть 3 проекта в одном решении.

У меня:

  • a собственная библиотека C ++,
  • C # Winform,
  • и прокси-сервер C ++ / CLI без чистого режима для связи между двумя другими проектами (и использования встроенной функции в управляемом коде на C #)

Итак, когда Я запускаю приложение, все работает. Но когда я нажимаю кнопку «Generer» в своей winform, которая выполняет функцию NativeMethod :: Test () C ++ / CLI, происходит сбой, и у меня появляется это всплывающее окно сообщение:

Необработанное исключение типа 'System.BadImageFormatException' произошло в System.Windows.Forms.dll

Дополнительная информация: не удалось загрузить файл или сборка EngineInterfaceWrapper.dll или один из его зависимости. n'est pas une приложение Win32 валид. (Исключение из HRESULT: 0x800700C1)

Когда я захожу в настройки проекта в Conf. Свойства -> Компоновщик -> Дополнительно: Целевая машина, он установлен со значением "MachineX86" для моей собственной и управляемой библиотеки C ++, и моя WinForm тоже находится в X86. Я устал от многих конфигураций, но это не работает.

Изменить:

Проблема может быть в заголовке "TradeEngine.h" "в заголовке C ++ / CLI: EngineInterfaceWrapper.h. Потому что, когда я отключаю родной C ++ Dll (и удаление всего кода в оболочке CLI), если я построю решение, оно будет работать, но если "#include" TradeEngine.h "" всегда находится в заголовке CLI, у меня будет такая же ошибка. У вас есть идея?

Изменить: - Решено -

Я наконец нашел проблему. Это библиотека ускорения, вызываемая в моем родном C ++ .h. Поскольку оболочка должна иметь собственный заголовок, она также связывает Boost библиотека (даже с моей прагмой в коде, это странно) и Boost создают много проблем при вызове в управляемом коде, поэтому я помещаю заголовки из собственного .h в собственный .cpp, и все работает. Спасибо всем за вашу помощь me.

Код:

собственный C ++

TradeEngine.h

#ifdef TRADEENGINE_EXPORTS
#define SYMBOL_DECLSPEC __declspec(dllexport)
#define SYMBOL_DEF
#else
#define SYMBOL_DECLSPEC __declspec(dllimport)
#define SYMBOL_DEF      __declspec(dllimport)
#endif

#pragma managed(push, off)
#include <curl/curl.h>
#include <boost\filesystem.hpp>

#include <boost\tokenizer.hpp>
#include <boost\lexical_cast.hpp>
#include <boost\thread.hpp>
#pragma managed(pop)

EXTERN_C SYMBOL_DECLSPEC void __stdcall Test(void);

TradeEngine.cpp

SYMBOL_DECLSPEC void __stdcall Test(void)
{
}

C ++ / CLI

EngineInterfaceWrapper.h

#pragma once

#include "TradeEngine.h"

using namespace System;
using namespace System::Runtime::InteropServices;

namespace EngineInterfaceWrapper {

    public ref class NativeMethod
    {
    public:
        static void AjoutColonneDifferenceCourtClotureOuvertureReelle(void);
        static void Test();
    };
}

EngineInterfaceWrapper.cpp

#pragma region Includes
#include "stdafx.h"
#include "EngineInterfaceWrapper.h"
using namespace EngineInterfaceWrapper;

#include <msclr/marshal.h>
using namespace msclr::interop;
#pragma endregion

void NativeMethod::Test()
{
    ::Test();
}

C # Winform

Progra m.cs

namespace TradeInterface
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

Form1.cs

generer_Click () - это событие, запускаемое кнопкой, когда пользователь нажимает на Generer.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Runtime.InteropServices;
using EngineInterfaceWrapper;

namespace TradeInterface
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void generer_Click(object sender, EventArgs e)
        {
            NativeMethod.Test();
        }
    }
}
5
задан 27 revs, 2 users 74% 11 March 2015 в 00:58
поделиться