Jak wywołać kod C++ Z C#
Mam kod C++. Ten kod zawiera funkcję włączania/wyłączania GPS systemu Windows mobile. Chcę wywołać tę metodę z kodu C#, co oznacza, że gdy użytkownik kliknie przycisk, kod C # powinien wywołać do kodu C++.
Jest to kod C++ umożliwiający działanie GPS:
#include "cppdll.h"
void Adder::add()
{
// TODO: Add your control notification handler code here
HANDLE hDrv = CreateFile(TEXT("FNC1:"), GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (0 == DeviceIoControl(hDrv, IOCTL_WID_GPS_ON, NULL, 0, NULL, 0, NULL, NULL))
{
RETAILMSG(1, (L"IOCTL_WID_RFID_ON Failed !! \r\n")); return;
}
CloseHandle(hDrv);
return (x+y);
}
A to jest plik nagłówkowy cppdll.h
:
class __declspec(dllexport) Adder
{
public:
Adder(){;};
~Adder(){;};
void add();
};
Jak mogę wywołać tę funkcję używając C#?
Proszę, czy ktoś może mi pomóc z tym problemem?1 answers
Dam ci przykład.
Powinieneś zadeklarować swoje funkcje C++ do eksportu w ten sposób (zakładając, że niedawno kompilator MSVC):
extern "C" //No name mangling
__declspec(dllexport) //Tells the compiler to export the function
int //Function return type
__cdecl //Specifies calling convention, cdelc is default,
//so this can be omitted
test(int number){
return number + 1;
}
I skompilować swój projekt C++ jako bibliotekę dll. Ustaw rozszerzenie docelowego projektu na .dll, oraz Typ konfiguracji do biblioteki dynamicznej (.dll).
Następnie w C# declare:
public static class NativeTest
{
private const string DllFilePath = @"c:\pathto\mydllfile.dll";
[DllImport(DllFilePath , CallingConvention = CallingConvention.Cdecl)]
private extern static int test(int number);
public static int Test(int number)
{
return test(number);
}
}
Następnie możesz wywołać swoją funkcję testową C++, jak można się spodziewać. Zauważ, że może to być trochę trudne, gdy chcesz przekazać ciągi, tablice, wskaźniki itp. Zobacz na przykład to więc pytanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:57