获取调用我的dll的exe的名称

时间:2017-07-02 19:26:32

标签: c# c++

我有一个调用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;

4 个答案:

答案 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中,根据您的平台,有不同的选项。