Я вызываю неуправляемую функцию из управляемого кода.Но неуправляемый вызов не происходит.
Управляемый код C #: (Создан проект (Sampletest) из Visual C # -> Консольное приложение) Sampletest:
namespace Sampletest
{
class Program
{
const string Dllpath2 = @"C:\Users\apc\source\repos\Sampletest\SampleDll\Debug\SampleDll.dll";
[DllImport(Dllpath2, EntryPoint = @"IsUPSPresent", CallingConvention = CallingConvention.Cdecl)]
public static extern Boolean IsUPSPresent();
static void Main(string[] args)
{
var test = IsUPSPresent();
Console.ReadKey();
}
}
}
Неуправляемый код C ++:
(Создан проект dll (SampleDll) из Visual C ++ -> Рабочий стол Windows -> Библиотека динамических ссылок)
Есть определение "IsUPSPresent ()"в SampleDll.cpp
#include "stdafx.h"
BOOL IsUPSPresent()
{
BOOL bRetValue = FALSE;
return bRetValue;
}
Но когда мы делаем неуправляемый вызов, сначала он собирается в файл dllmain.cpp, присутствующий в неуправляемом коде.
#include "stdafx.h"
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
, затем он не собирается
Функция BOOL IsUPSPresent ()
и возврат к управляемому вызову по адресу "var test = IsUPSPresent ();"
, показывающий ошибку "Необработанное исключение в 0x7705D6C7 (ntdll).dll) в Sampletest.exe: 0xC0000096: Привилегированная инструкция.
Настройки, которые я сделал:
Для проекта C #,
Debug-> Selected "Включить отладку собственного кода "
И я выбрал" Отладка "," x86 "
Пожалуйста, помогите мнерешить эту проблему.