gpt4 book ai didi

c++ - 将 std::string 传递给 C++ DLL 以便与 C# dll 一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 12:52:24 25 4
gpt4 key购买 nike

我正在尝试将字符串从 C++ 控制台应用程序传递到 C++ dll,然后将其转换为 System::string 以发送到 C# dll。但是字符串作为随机字符出现。请注意,lShutdown 实际上是正确的,因为它在 dll 中定义,因此问题一定在 testapp 和 C++ dll 之间。我以前有过这个工作,但我一辈子都不知道我是怎么做到的

这是传递给 dll 的代码:

void GMSTestAppC::GMSSetup()
{
string processName = "GMSCTestApp";
string progName = "TestApp";
//Directory where program is installed
string progDir = "C:/";
string version = "4.0.0.1";
//Directory for config file
string configDir = "C:/";
//Directory for log files
string logDir = "C:/";
string user = "Smurf";
string shutdownby = "";
Initialize(processName, GetCurrentProcessId(), progName, progDir, version, configDir, logDir, user, shutdownby);
}

这是dll代码:

bool Initialize(std::string& processName, int processID, std::string& programName, std::string& programDir, std::string& version, std::string& configDir, std::string& logDir, std::string& currentUser, std::string& lastShutDownBy)
{
String^ pName = gcnew String(processName.c_str());
String^ progName = gcnew String(programName.c_str());
String^ progDir = gcnew String(programDir.c_str());
String^ cDir = gcnew String(configDir.c_str());
String^ lDir = gcnew String(logDir.c_str());
String^ cUser = gcnew String(currentUser.c_str());
String^ lShutdown = gcnew String("test");
GMS::GMSVersion fv;
sscanf_s(version.c_str(), "%d.%d.%d.%d", &fv.Major, &fv.Minor, &fv.Revision, &fv.Build);
int pID = int(processID);

Return GMS::Initialize(pName, pID, progName, progDir, fv, cDir, lDir, cUser, lShutdown);
}

这是我实际得到的:

Sent: <InitializeProgram>
<TimeStamp>2018-01-22T14:34:37.6152709+00:00</TimeStamp>
<PID>13504</PID>
<ProcessName>(÷'</ProcessName>
<ProgramName>Ðð'</ProgramName>
<ProgramDir>°ñ'</ProgramDir>
<Version>0.0.0.0</Version>
<ConfigDir>^ô'</ConfigDir>
<LogDir>èñ'</LogDir>
<CurrentUser>÷'</CurrentUser>
<LastShutDownBy>test</LastShutDownBy>
</InitializeProgram>

程序每次运行通过的字符都不一样

任何帮助将不胜感激

最佳答案

如果您使用的是 C++11(您很可能正在使用),您可以尝试使用 std::u32string。它消除了使用 std::wstring 的需要,并且是跨平台的标准。

关于c++ - 将 std::string 传递给 C++ DLL 以便与 C# dll 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48384169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com