Как создать C ++ Dll для C# форм, вызывающих функцию DirectX? - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу создать приложение DirectX, которое использует C# формы для обработки окон, потому что это то, с чем я больше всего знаком. Я сделал проект C ++ Dll и добавил эти зависимости, чтобы получить DirectX под Linker -> Input -> Additional Dependencies.

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

И я установил Подсистему в Системе на Windows. И установите выходную папку в папку bin проекта C# Forms, чтобы мне не нужно было копировать вставку каждый раз, когда я собираю проект C ++. Затем я добавляю два файла, заголовок A и файл 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, и я понятия не имею, что искать, чтобы найти победителя или лидера

1 Ответ

0 голосов
/ 27 апреля 2020

Спасибо за помощь в поиске или объяснении моей проблемы:)

Для ссылки на 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 * лицевые маски *

...