Попытка использовать LPTSTR из C++ в C#
Система выдает исключение
System.NullReferenceException: 'Object reference not set to an instance of an object.'
Если кто-то знает решение, Пожалуйста, помогите
Что я уже пробовал:
Я пытаюсь использовать функцию c++, которая возвращает LPTStr в c#
Это мое dll.cpp файл
;extern "C" __declspec(dllexport) LPTSTR PID_GetProcessName(int a) { DWORD aProcesses[1024], cbNeeded, cProcesses; unsigned int i; EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded); if (!EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded)) { return NULL; } // Calculate how many process identifiers were returned. cProcesses = cbNeeded / sizeof(DWORD); TCHAR szProcessName[MAX_PATH]; // Get a handle to the process. for (int i = 0; i <= cProcesses; i++) if (i == a) { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]); // Get the process name. if (NULL != hProcess) { HMODULE hMod; DWORD cbNeeded; if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) { GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName) / sizeof(TCHAR)); LPTSTR b = szProcessName; return b; } } CloseHandle(hProcess); break; } }
Это мой код на языке c#
[DllImport("D:\\RunningProcessDll\\Debug\\RunningProcessDll.dll", CallingConvention = CallingConvention.Cdecl)] [return : MarshalAs(UnmanagedType.LPTStr)] public static extern string PID_GetProcessName(int a);
Richard Deeming
Вам действительно нужен этот код C++? То System.Diagnostics.Process
класс[^] уже должен предоставить вам доступ к этой информации.