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