使用DLL将C# StringBuilder / string传递给C++ char*的过程可以通过以下步骤完成:
下面是一个示例代码:
C#类库项目(生成DLL):
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace MyDll
{
public class MyDllClass
{
[DllImport("MyCppDll.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void MyCppFunction(IntPtr str);
public static void PassStringToCpp(string str)
{
byte[] bytes = Encoding.ASCII.GetBytes(str);
IntPtr ptr = Marshal.AllocHGlobal(bytes.Length + 1);
Marshal.Copy(bytes, 0, ptr, bytes.Length);
Marshal.WriteByte(ptr + bytes.Length, 0); // Null-terminate the string
MyCppFunction(ptr);
Marshal.FreeHGlobal(ptr);
}
}
}
C++项目(生成DLL):
#include <iostream>
extern "C" __declspec(dllexport) void MyCppFunction(char* str)
{
std::cout << "Received string from C#: " << str << std::endl;
}
在C#的应用程序中,可以引用生成的DLL文件,并调用其中的方法:
using System;
using MyDll;
class Program
{
static void Main()
{
string myString = "Hello from C#!";
MyDllClass.PassStringToCpp(myString);
}
}
这样,C#中的StringBuilder或string对象就可以通过DLL传递给C++中的char*了。在C++中,可以对接收到的字符串进行进一步的处理。
领取专属 10元无门槛券
手把手带您无忧上云