繁体   English   中英

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

[英]Passing std::string to C++ DLL for use with C# dll

我正在尝试将字符串从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的需要,并且是跨平台的标准配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM