You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

75 lines
1.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## 介绍
- 基本MVVM代码结构、包括Command绑定控件
- 实现单例模式
- 实现C#驱动Go项目
- View:
- MordenWPF美化控件
- Hardcodet实现WPF系统托盘效果
- 代码实现图标闪烁
## CSharp using Go
> 安装 MinGW [https://github.com/niXman/mingw-builds-binaries](https://github.com/niXman/mingw-builds-binaries)
> 参考 [MinGW-W64 下载、安装与配置支持最新版的GCC目前 GCC 13.2.0](https://blog.csdn.net/B11050729/article/details/132176767)
> [https://github.com/Baozisoftware/go-dll/wiki](https://github.com/Baozisoftware/go-dll/wiki)
```Go
package main
import (
"C"
"zggsong.cn/scadatool/server"
)
func main() {
run()
}
//export run
func run() string {
// 启动服务
server.StartServer()
return "success"
}
```
```C#
/// <summary>
/// 引入Go项目库
/// </summary>
/// <returns></returns>
[DllImport("scadatool_go.dll", EntryPoint = "run")]
extern static GoString run();
#本项目中的代码示例
string result = GoCSharpHelper.Instance().GoStringToCSharpString(run());
```
**Go字符串乱码问题**
```C#
/// <summary>
/// 转换Go string类型为C# String
/// </summary>
public struct GoString
{
public IntPtr p;
public int n;
public GoString(IntPtr n1, int n2)
{
p = n1; n = n2;
}
}
public string GoStringToCSharpString(GoString goString)
{
byte[] bytes = new byte[goString.n];
for (int i = 0; i < goString.n; i++)
{
bytes[i] = Marshal.ReadByte(goString.p, i);
}
string result = Encoding.UTF8.GetString(bytes);
return result;
}
```