sit*_*eal 20
在你的c代码中:
extern "C" __declspec(dllexport)
int GetString(char* str)
{
}
extern "C" __declspec(dllexport)
int SetString(const char* str)
{
}
Run Code Online (Sandbox Code Playgroud)
在.net方面:
using System.Runtime.InteropServices;
[DllImport("YourLib.dll")]
static extern int SetString(string someStr);
[DllImport("YourLib.dll")]
static extern int GetString(StringBuilder rntStr);
Run Code Online (Sandbox Code Playgroud)
用法:
SetString("hello");
StringBuilder rntStr = new StringBuilder();
GetString(rntStr);
Run Code Online (Sandbox Code Playgroud)
Sam*_*ous 12
将字符串从C#传递给C++应该是直截了当的.PInvoke将为您管理转换.
从C++到C#的字符串可以使用StringBuilder完成.您需要获取字符串的长度才能创建正确大小的缓冲区.
以下是众所周知的Win32 API的两个示例:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
public static string GetText(IntPtr hWnd)
{
// Allocate correct string length first
int length = GetWindowTextLength(hWnd);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(hWnd, sb, sb.Capacity);
return sb.ToString();
}
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool SetWindowText(IntPtr hwnd, String lpString);
SetWindowText(Process.GetCurrentProcess().MainWindowHandle, "Amazing!");
Run Code Online (Sandbox Code Playgroud)