Не могу связать c # .Net Core 3.0 с зависимостью от DirectX 9.0 - PullRequest
1 голос
/ 30 сентября 2019

У меня есть док-приложение 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");
}

1 Ответ

0 голосов
/ 05 октября 2019

Никто, вероятно, не обращает на это внимание, но вот ответ. Часть моего кода сделала вызов D3DXMatrixOrthoLH (). Удаление этого вызова привело к исчезновению ошибки. Единственное, о чем я могу думать, - это как-то разрешать вызов метода к библиотеке x86. Было довольно легко перейти на новый способ работы с DirectXMath вместо d3dxmath.

...