如何为调用 DirectX 函数的 C# 窗体制作 C++ Dll?

How do I make a C++ Dll for a C# Forms that calls a DirectX function?

我想制作一个使用 C# Forms 进行 window 处理的 DirectX 应用程序,因为这是我最熟悉的。我创建了一个 C++ Dll 项目并添加了这些依赖项以在链接器 -> 输入 -> 附加依赖项下获取 DirectX。

d3d11.lib
dxgi.lib
dxguid.lib
uuid.lib
kernel32.lib
user32.lib
comdlg32.lib
advapi32.lib
shell32.lib
ole32.lib
oleaut32.lib

并且我将系统下的子系统设置为Windows。并将输出文件夹设置为 C# Forms 项目的 bin 文件夹,这样我就不必每次构建 C++ 项目时都复制粘贴。然后我添加两个文件,一个头文件和一个 cpp 文件。

TestExport.h

#pragma once

#include "pch.h"

#include <d3dcompiler.h>
#include <d3d11_1.h>
#include <directxcolors.h>
#include <wrl/client.h>

using namespace DirectX;

extern "C"
{
    __declspec(dllexport) void __cdecl Test();
}

TestExport.cpp

#include "pch.h"
#include "TestExport.h"

void Test()
{
    ID3DBlob *pBlob;
    D3D10CreateBlob(12, &pBlob);
    delete pBlob;
}

我知道 TestExport.cpp 中的函数目前没有做任何事情,但当问题得到解决时,它会被一些真正的方法所取代。 问题是我一调用 D3D10CreateBlob 方法就收到 LNK2001 unresolved external symbol _D3D10CreateBlob@8 错误。我对 Dll 的了解不多,也不知道要搜索什么才能找到 awnser 或 lead

感谢您帮助我找到或解释我的问题:)

为了 link 到 DirectX,我在 配置属性 -> C/C++ -> 常规 -> 其他包含目录 中添加了包含路径。 visual studio 谢天谢地,包含文件夹有一个名为 $(WindowsSDK_IncludePath).

的宏

然后我转到 配置属性 -> 链接器 -> 常规 -> 其他库目录 并将 x64 平台设置为 $(WindowsSDK_LibraryPath_x64 ) 和 x86 到 $(WindowsSDK_LibraryPath_x86).

我还更改了 配置属性 -> 链接器 -> 输入 -> 附加依赖项 以包含

dxgi.lib
d3d11.lib
d3d12.lib
d3d10.lib
d3dcompiler.lib

我认为这是我遇到的实际问题。我没有包括 d3d10.lib * facepalms *