[Dllimport("ZhongWenFenCi.dll", EntryPoint = "TJ", CallingConvention = CallingConvention.Cdecl)]
public static extern void TJ(StringBuilder result);
private void 中文分词()
{
StringBuilder result = new StringBuilder();
TJ(result);
string str = result.ToString();
this.分词.Text = $"{str}";
}
C++
#pragma warning(disable : 4996) #include#include using namespace std; void TJ(char* b) { char s[20] = "你好"; cout << s << endl; strcpy(b, s); }
不能使用const char将C++字符串指针传出是因为C#调用Dll会释放其内存,此时该指针是野指针,传出的内容自然是乱码。应当传入一块内存用以C++写入,如char[],byte[],StringBuilder等。
三、WPF中跨线程访问控件
在WPF中跨线程访问控件需要使用Dispatcher。Dispatcher是WPF中的线程调度管理器,用在子线程刷新主线程(UI线程)(比如绑定的时候,属性更新的时候),在子线程里面起一个dispatcher,将工作项目调度到 UI 线程,让主线程调度刷新UI的代码。示例代码如下:
private void SetText(string str)
{
if (!Dispatcher.CheckAccess())//判断是否是被其他线程调用
{
Dispatcher.Invoke(() => SetText(str));
return;
}
textBox01.Text = str;
}



