эта тема, конечно, не выглядит «новой», но после прочтения ряда постов, блогов и комментариев я все еще не знаю, и не могу заставить работать мое тестовое приложение.
С точки зрения реализации I должен скомпилировать dll с помощью mingW (когда используются другие компиляторы MSVC, количество ошибок является значительным).Однако это вызывает ошибку при вызове в c # VS2017:
System.BadImageFormatException: «Была сделана попытка загрузить программу с неверным форматом.(Исключение из HRESULT: 0x8007000B) '
В то время как образец DLL отлично работает в проекте Visual Studio при компиляции с MSVC2107-64bit (но при попытке компиляции выдает 120+ ошибок) существующая реализация с тем же компилятором).
Мой пример кода для экспорта в DLL прост ( в Qt ):
//qtLib.h
#pragma once
extern "C"
{
__declspec(dllexport) int __stdcall test();
}
//qtLib.cpp
#include "qtlib.h"
int __stdcall test()
{
return 10;
}
При экспорте этогои просмотр имени функции с помощью Dependency Walker , имя функции:
Затем попытка вызвать DLL в VS2017 (C #):
[DllImport("QtLib.dll", EntryPoint = "test@0", CallingConvention = CallingConvention.StdCall)]
static extern int test();
public void testFunc()
{
int val = test();
}
- 'Разрешить небезопасный код' также отмечен в свойствах проекта
И тип ошибок, которые я получаю при компиляции полного кода реализации вMSVC, не mingW (в Qt):
__attribute__
: неизвестный спецификатор переопределения
deprecated
: необъявленный идентификатор
DISTANCE_OVERFLOW
: данныеэлемент не может быть инициализирован инициализатором в скобках
DJI::OSDK::ErrorCode::MissionACK::WayPoint::DISTANCE_OVERFLOW
: статический элемент данных с iИнициализатор n-класса должен иметь неизменяющий константный интегральный тип или быть задан как inline
тип равен const uint8_t &
Так что я понятия не имею, что лучше... чтобы попытаться прочитать mingW DLL в VS2017 (MSVC), или попытаться преобразовать код реализации, чтобы иметь возможность компилировать DLL в MSVC (очень утомительно)?Есть ли "быстрое решение"? ... пожалуйста?