У меня есть док-приложение C # WPF Avalon, которое прекрасно работает под .Net Core 3.0. У меня также есть куча нативного кода C ++, для которого я написал оболочку C ++ .Net, в которую я пытаюсь интегрироваться. Все связывается нормально, но когда он пытается загрузить мою DLL-оболочку, он вылетает с «попыткойбыл сделан, чтобы загрузить программу с неправильным форматом. "ошибка.
Я попытался вызвать метод ведения журнала C ++ в другой библиотеке C ++ без проблем. Я скопировал все параметры компиляции из этой библиотеки в мою библиотеку DirectX, но проблема остается. Я скопировал d3dx9.dll, d3dx9_43.dll и d3dx9d_43.dll в исполняемый каталог, который оказался в том же каталоге, что и DLL-оболочка. Я проверил в Configuration Manager, что конфигурация и платформа одинаковы для всех библиотек и исполняемого файла.
Это мой код оболочки DLL. Когда я комментирую вызов DX, DLL загружается без проблем. Как только я откомментирую вызов Direct3DCreate9 (), при попытке загрузить dll появляется ошибка неверного формата. DLL-оболочка связывается без ошибок. Заголовочный файл:
#pragma once
namespace ADIVSdll {
public ref class ADIVSInterop
{
public:
void startLive(System::IntPtr handle);
void startPlayback(System::String^ str);
private:
};
}
Файл реализации:
#include "pch.h"
#define _AMD64_
#include "ADIVSdll.h"
#include <wtypes.h>
#include "CppUtil/Logger.h"
#include <../../Microsoft DirectX SDK (June 2010)/include/d3d9.h>
void ADIVSdll::ADIVSInterop::startLive(System::IntPtr handle)
{
HWND hWnd = (HWND) (long long)handle;
//IDirect3D9* md3dObject = Direct3DCreate9(D3D_SDK_VERSION);
Logger::init("log.log");
}