簡體   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