Используйте c ++ dll в wpf (c #) и исключение точки входа - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь импортировать dll c ++ dll в c #, но система показывает исключение

System.EntryPointNotFoundException: 'Невозможно найти точку входа с именем' 0x00011091 'в DLL' D: \ project \ RunningProcessDll\ Debug \ RunningProcessDll .dll '.'

Это dllmain.cpp file

// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include "dllmain.h"

UINT PID_GetProcessId() {

TCHAR szProcessName[MAX_PATH];
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded);
cProcesses = cbNeeded / sizeof(DWORD);
for (i = 0; i < cProcesses; i++) {
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
        PROCESS_VM_READ,
        FALSE, aProcesses[i]);
    if (NULL != hProcess)
    {
        HMODULE hMod;
        DWORD cbNeeded;

        if (EnumProcessModules(hProcess, &hMod, sizeof(hMod),
            &cbNeeded))
        {
            GetModuleBaseName(hProcess, hMod, szProcessName,
                sizeof(szProcessName) / sizeof(TCHAR));
        }
    }
    return aProcesses[i];

}

}

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;
}

Это dllmain.h file

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <tlhelp32.h>
#include <Psapi.h>
extern "C" __declspec(dllexport) UINT PID_GetProcessId();

Это файл приложения c # wpf

[DllImport(@"D:\\project\\RunningProcessDll\\Debug\\RunningProcessDll.dll",
        EntryPoint ="0x00011091", CallingConvention = 
CallingConvention.Cdecl)]
    public static extern uint PID_GetProcessID();
    int a = size();
    public MainWindow()
    {

        InitializeComponent();
        for (int i = 0; i <= a; i++)
        {
            dg.Items.Add(new Process()
            {

                ID = PID_GetProcessID().ToString(),

            });
        }

Я просмотрел несколько сайтов, но проблема не решилась.Я даже проверил точку входа функции через оболочку зависимостей, а затем добавил ее в dllImport, но это исключение все еще происходит

...