gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:32:18 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com