Hello World para Pinvoke e chamadas nativas
Estou tentando fazer um olá mundo muito básico para chamadas Pinvoke e nativas.
Crio uma solução única com 2 projetos (um para a dll e outro para o aplicativo universal do windows)
Então, eu acabei com um projeto de heirachy como este
Existe um método na minha dll (arquivo NativeCalls.cpp):
#include "pch.h"
#include "NativeCalls.h"
#include <stdio.h>
MYAPI void print_line(const char* str) {
printf("%s\n", str);
}
No lado C # das coisas, tenho meu arquivo NativeCalls.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace MSSurfaceHubMonitoring
{
public static class NativeCalls
{
[DllImport("NativeCalls.dll")]
private static extern void print_line(string str);
public static void sayHelo()
{
print_line("Hello, PInvoke!");
}
}
}
Neste ponto, eu vou compilá-lo e executá-lo, mas recebo um erro que não consegue encontrar a dll
No entanto, acredito que seja a dependência e não a dll. Alterei o diretório de saída da dll para ficar na raiz de onde o aplicativo UW é executado (\ bin \ x86), portanto, ele realmente deve ser encontrado. Então, como eu disse, acho que são as dependências e não a dll real.
Aqui está o que eu vejo no Dependency WalkerMas eu instalei todos os pacotes c ++ em que posso colocar minhas mãos, então não entendo como obter as dependências ausentes. Além disso, este é apenas um olá mundo, por que preciso de todas essas bibliotecas.
FYI Meu projeto DLL não é referenciado pelo aplicativo UW. Não tenho certeza se isso é necessário ou não? Eu acho que não, já que isso é uma coisa de tempo de execução, enquanto a dll estiver lá, ela deve encontrá-la e lê-la. Mas, independentemente se eu tentar adicionar o projeto como referência, recebo este erro: