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

问题描述 投票:0回答:1

我想制作一个使用C#窗体进行窗口处理的DirectX应用程序,因为这是我最熟悉的。我创建了一个C ++ Dll项目,并添加了这些依赖关系,以在Linker-> Input-> Additional Dependencies下获得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中的函数目前不执行任何操作,但是在问题解决后,它将用某种实际方法代替。问题是,一旦调用LNK2001 unresolved external symbol _D3D10CreateBlob@8方法,就会出现D3D10CreateBlob错误。我对Dll的了解不多,也不知道要搜索什么才能找到遮阳篷或线索

c++ visual-c++ dll directx
1个回答
0
投票

感谢您帮助我发现或解释我的问题:)

要链接到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 *

© www.soinside.com 2019 - 2024. All rights reserved.