C++将字符串传递到C#dll中

本文关键字:C#dll 字符串 C++ | 更新日期: 2023-09-27 18:29:17

我有一个C++应用程序通过wrapper.cpp调用C#dll中的WORD(名称,cpu)函数,它包含一个错误。有人能帮我吗?提前谢谢。

错误C2664:"CsharpDLL::WORD":无法将参数1从"std::string"转换为"System::string^"

C++应用程序

extern "C" _declspec(dllimport) void _stdcall WORD(string name, string cpu);
int main()
{
    string name="f";
    string cpu="F";
    WORD(name,cpu);
}

包装纸.cpp

extern "C" _declspec(dllexport) void _stdcall WORD(string name ,string cpu)
{
    return CsharpDLL::WORD(name,cpu);  // <-- Error here
}

C#dll

public class CsharpDLL
{
    public static void WORD(string name, string cpu)
    {
    if(cpu=="add")
    {
        Console.WriteLine("aa");
    }
}

C++将字符串传递到C#dll中

您需要从传递到包装函数的每个std::string的字符数组中构造一个System::String

extern "C" _declspec(dllexport) void _stdcall WORD(string name ,string cpu)
{
    System::String ^managedName = gcnew System::String(name.c_str());
    System::String ^managedCpu = gcnew System::String(cpu.c_str());
    return CsharpDLL::WORD(managedName, managedCpu);
}