将 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
的需要,并且是跨平台的标准配置。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 从C++dll访问C#中的一行主要参数
- 如何将第三方 dll、标头和库文件与 Node N-API 一起使用
- 将标头和 lib 转换为 dll 以将其与 c# 一起使用
- C 和WXWIDGETS DLL创建并与Microsoft Access一起使用
- 将 std::string 传递给 C++ DLL 以便与 C# dll 一起使用
- 系统DLL如何与不兼容版本的Visual Studio一起使用
- 使用Cmake与Visual Studio 2017一起构建ssh.dll
- 将C#中的C++类与字符串(Dll)一起使用
- 将DLL与python一起使用(使用ctypes),不起作用
- 是否可以在不安装可分发的 VC++ 包的情况下将 MSVCRT DLL 与我的应用捆绑在一起
- visual将COM dll与非托管c++一起使用
- 名称篡改如何与使用不同编译器编译的DLL和LIB一起工作
- 将.NET 4.0与dll一起使用时出现未知错误
- 如何将c++ dll与C应用程序一起使用?< / h1 >
- DLL可以与其他编程语言一起使用吗?