У меня есть проект Winui C#, из которого я генерирую DLL, затем я использую проект C ++/CLI, чтобы подвергать функции нативного проекта C ++.
Код: Выделить всё
namespace ClassLibrary
{
public class Class1
{
public void SayHello()
{
System.Diagnostics.Debug.WriteLine("Hello from ClassLibrary.Class1!");
Application.Start(p =>
{
var window = new MainWindow();
window.Activate();
});
}
}
}
Код: Выделить всё
//"ProjectCLR.h"
#pragma once
extern "C" __declspec(dllexport) void __stdcall StartWinUI();
//"ProjectCLR.cpp"
using namespace System;
using namespace ClassLibrary;
void __stdcall StartWinUI()
{
try
{
Class1^ obj = gcnew Class1();
obj->SayHello();
}
catch (Exception^ ex)
{
System::Diagnostics::Debug::WriteLine("StartWinUI failed: " + ex->Message);
}
}
< /code>
и, наконец, в моем проекте C ++: < /p>
int main()
{
HRESULT hrInit = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
if (FAILED(hrInit)) {
return hrInit;
}
PACKAGE_VERSION minVer{};
minVer.Major = 1;
minVer.Minor = 8;
auto hL = LoadLibraryW(L"Microsoft.WindowsAppRuntime.Bootstrap.dll");
if (!hL) return E_FAIL;
auto M = (decltype(&MddBootstrapInitialize))GetProcAddress(
hL, "MddBootstrapInitialize");
if (!M) return E_FAIL;
HRESULT hr = M(0x00010008, L"", minVer);
return hr;
StartWinUI();
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... perability
Мобильная версия