我有一个调用C ++ DLL的C#项目 在返回C ++ dll中的值之前,我想检查调用我的方法的C#exe的名称。你能告诉我一下吗?
我像这样加载c ++ dll:
[DllImport("MindSystem.dll",
EntryPoint = "MindSystemPlusPlus",
CharSet = CharSet.Ansi,
CallingConvention = System.Runtime.InteropServices.CallingConvention.Cdecl)]
public static extern IntPtr MindSystemPlusPlus(int value);
当我加载它时,我希望c ++ dll检查调用它的exe的名称
编辑:我尝试了这段代码,但c#中的输出是奇怪的字符:
char fileName[MAX_PATH + 1];
GetModuleFileNameA(NULL, fileName, MAX_PATH + 1);
return fileName;
答案 0 :(得分:1)
您应该尝试使用GetModuleFileName()函数。你可以获得exe的完整路径。请记住,如果您的DLL由多个应用程序加载,则返回的文件路径将仅引用其中一个。
答案 1 :(得分:1)
您可以拨打GetModuleFileName功能。 NULL作为第一个参数意味着请求当前进程的可执行文件的路径。
std::string expectedPath("C:\\expected.exe");
TCHAR fileName[MAX_PATH + 1];
DWORD charsWritten = GetModuleFileName(NULL, fileName, MAX_PATH + 1);
if (charsWritten != 0)
{
if (expectedPath == fileName)
{
// do something
}
}
答案 2 :(得分:0)
#include <windows.h>
#include <shellapi.h>
int argc = 0;
auto wargv = CommandLineToArgvW(GetCommandLineW(), &argc);
auto program_path = wargv[0];
...
LocalFree(wargv);
文件:
答案 3 :(得分:0)
取决于。
如果您使用带有/ clr的c ++,则可以使用从Process
返回的Process::GetCurrentProcess()
的名称。
在Windows中的本机代码中,您可以使用GetModuleFileName()
在Linux或MAC中,根据您的平台,有不同的选项。