c# - 无法将 c# .Net Core 3.0 与 directx 9.0 依赖项链接起来

标签 c# c++ .net directx .net-core-3.0

我有一个 C# WPF Avalon dock 应用程序,它在 .Net Core 3.0 下运行良好。我还有一堆 C++ native 代码,为此我编写了一个 C++ .Net 包装器,我试图将其集成到其中。一切都链接正常,但是当它尝试加载我的包装器 DLL 时,它崩溃并显示“尝试用于加载格式不正确的程序。”错误。

我试过在不同的 C++ 库中调用 C++ 日志记录方法,没有任何问题。我将所有编译参数从这个库复制到我的 directx 库,但问题仍然存在。我将 d3dx9.dll、d3dx9_43.dll 和 d3dx9d_43.dll 复制到可执行目录,该目录恰好与包装器 DLL 位于同一目录。我已在配置管理器中验证所有库和可执行文件的配置和平台都相同。

这是我的 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");
}

最佳答案

可能没有人注意这一点,但答案在这里。我的一些代码调用了 D3DXMatrixOrthoLH()。删除此调用会导致错误消失。我唯一能想到的是,它以某种方式解析了对 x86 库的方法调用。使用 DirectXMath 而不是 d3dxmath 转移到更新的处理方式相当容易。

关于c# - 无法将 c# .Net Core 3.0 与 directx 9.0 依赖项链接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58174983/

相关文章:

C++ base 10 to base 2逻辑错误

c# - 我应该更喜欢封闭式还是开放式列表<>系统?

c# - 为什么返回 List<T> 的方法不能实现返回 IEnumerable<T> 的方法?

javascript - 为什么我不能使用 C# WebBrowser 控件触发选择更改事件?

c++ - GDB C++ 如何停止进入标准库

c++ - 不明白为什么 C++ 程序没有输出

c# - Linq-按自定义顺序发出

c# - 如何将光标焦点设置到文本框?

c# - Visual Studio 2015 RC Entity Framework 6.1.3 迁移错误

c# - 值在枚举列表中