如何在从 C++ DLL 导入的 C# 函数中使用字符串作为参数?
How to use string as parameter in c# functions imported from c++ DLL?
我有一个用 C++ 编写的 dll。该函数将字符串作为输入,并根据某些内部算法将 returns 长整型作为输入。该函数在 c++ 中 运行 时完全按预期工作,但当 dll 与 c# 一起使用时,尽管它没有抛出异常或没有给出错误,但程序停止工作。有人可以帮助我吗?
C++
static __declspec(dllexport) long long WriteUserData(string userId, int userIdLen)
{
cout<<"ID is: "<<userId<<endl;//In c++ displays output but not when called in c#
cout<<userIdKen<<endl;
.
.SomeCode
.
return (some long value)
}
C#
using System;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace Extreme.Numerics.QuickStart.CSharp
{
class Program
{
[DllImport(".dll path..",EntryPoint = @"?...entryPoint....",CallingConvention = CallingConvention.Cdecl)]
public static extern long WriteUserData(string id, int idLen)
static void Main(string[] args)
{
long Serial= WriteUserData("@@rpan@@@@@@@",13);
Console.WriteLine("test test test");
}
}
}
C# 输出:
Id is:
它不再显示任何内容。最后一行Console.WriteLine("test test test");
也没有显示
在 C++ 端,从 string
更改为 const char*
。保留 C# 端。这就是 P/Invoke 在声明端看到 C# string
时的默认期望。
我有一个用 C++ 编写的 dll。该函数将字符串作为输入,并根据某些内部算法将 returns 长整型作为输入。该函数在 c++ 中 运行 时完全按预期工作,但当 dll 与 c# 一起使用时,尽管它没有抛出异常或没有给出错误,但程序停止工作。有人可以帮助我吗?
C++
static __declspec(dllexport) long long WriteUserData(string userId, int userIdLen)
{
cout<<"ID is: "<<userId<<endl;//In c++ displays output but not when called in c#
cout<<userIdKen<<endl;
.
.SomeCode
.
return (some long value)
}
C#
using System;
using System.Text;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace Extreme.Numerics.QuickStart.CSharp
{
class Program
{
[DllImport(".dll path..",EntryPoint = @"?...entryPoint....",CallingConvention = CallingConvention.Cdecl)]
public static extern long WriteUserData(string id, int idLen)
static void Main(string[] args)
{
long Serial= WriteUserData("@@rpan@@@@@@@",13);
Console.WriteLine("test test test");
}
}
}
C# 输出:
Id is:
它不再显示任何内容。最后一行Console.WriteLine("test test test");
也没有显示
在 C++ 端,从 string
更改为 const char*
。保留 C# 端。这就是 P/Invoke 在声明端看到 C# string
时的默认期望。