标题: [问题求助] 求精通C#和PowerShell的大佬合并C#文件到PS中使用 [打印本页]
作者: 小白龙 时间: 2023-4-7 21:38 标题: 求精通C#和PowerShell的大佬合并C#文件到PS中使用
说来真是折腾,
先是找的AHK的代码高亮组件, 对中文支持不好,
接着找的C++代码, 遇到各种语法问题,
今天在github搜的时候, 找到一个.net组件名字叫EasyScintilla 编译成了exe用了一下, 居然支持8种编程语言语法着色, 完全满足需要, 更重要的时候, 我看了下源代码, 实际代码只要不到七八十行,
重要代码分布在了如下的 Form1.cs和Form1.Designer.cs两个文件中, 怎样把这两个文件合并后, 嵌入到ps中来运行呢? 求路过高手支招, 谢谢
编译后的EXE和源代码在下面链接
https://t.wss.ink/f/awy92us406a 复制链接到浏览器打开
效果展示
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using EasyScintilla.Stylers;
-
- namespace ExampleProject
- {
- public partial class Form1 : Form
- {
-
- private ExampleDisplay[] _examples = new ExampleDisplay[]
- {
- new ExampleDisplay("C#", "cs.txt", new CSharpStyler()),
- new ExampleDisplay("C# (Dark)", "cs.txt", new DarkCSharpStyler()),
- new ExampleDisplay("Windows Batch", "bat.txt", new BatchStyler()),
- new ExampleDisplay("HTML", "html.txt", new HtmlStyler()),
- new ExampleDisplay("JSON", "json.txt", new JsonStyler()),
- new ExampleDisplay("PowerShell", "ps1.txt", new PowerShellStyler()),
- new ExampleDisplay("Python", "py.txt", new PythonStyler()),
- new ExampleDisplay("Ruby", "rb.txt", new RubyStyler()),
- new ExampleDisplay("T-SQL", "sql.txt", new SqlStyler()),
- new ExampleDisplay("Teradata Parallel Transporter", "tpt.txt", new TptStyler()),
- };
-
- public Form1()
- {
- InitializeComponent();
- }
-
- private void Form1_Load(object sender, EventArgs e)
- {
- stylerPicker.DataSource = _examples;
- stylerPicker.DisplayMember = "Display";
- }
-
- private void stylerPicker_SelectedIndexChanged(object sender, EventArgs e)
- {
- var example = _examples[stylerPicker.SelectedIndex];
- editor.Text = example.ReadFile();
- editor.Styler = example.Styler;
- }
- }
- }
复制代码
- namespace ExampleProject
- {
- partial class Form1
- {
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- /// </summary>
- private void InitializeComponent()
- {
- this.editor = new EasyScintilla.SimpleEditor();
- this.stylerPicker = new System.Windows.Forms.ComboBox();
- this.SuspendLayout();
- //
- // editor
- //
- this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
- this.editor.Location = new System.Drawing.Point(12, 12);
- this.editor.Name = "editor";
- this.editor.Size = new System.Drawing.Size(854, 603);
- this.editor.Styler = null;
- this.editor.TabIndex = 0;
- //
- // stylerPicker
- //
- this.stylerPicker.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.stylerPicker.FormattingEnabled = true;
- this.stylerPicker.Location = new System.Drawing.Point(12, 621);
- this.stylerPicker.Name = "stylerPicker";
- this.stylerPicker.Size = new System.Drawing.Size(854, 21);
- this.stylerPicker.TabIndex = 1;
- this.stylerPicker.SelectedIndexChanged += new System.EventHandler(this.stylerPicker_SelectedIndexChanged);
- //
- // Form1
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(878, 656);
- this.Controls.Add(this.stylerPicker);
- this.Controls.Add(this.editor);
- this.Name = "Form1";
- this.Text = "EasyScintilla Test App";
- this.Load += new System.EventHandler(this.Form1_Load);
- this.ResumeLayout(false);
-
- }
-
- #endregion
-
- private EasyScintilla.SimpleEditor editor;
- private System.Windows.Forms.ComboBox stylerPicker;
- }
- }
复制代码
作者: 小白龙 时间: 2023-4-7 21:53
本帖最后由 小白龙 于 2023-4-7 22:07 编辑
我的想法是, 把上面的代码编辑器定义为一个函数, 关闭编辑器后, 返回修改后的代码! 基本代码如下:
需要引用的dll文件EasyScintilla.dll 在EXE文件夹中- Add-Type -Path "$home\Desktop\EasyScintilla.dll"
-
- $batcode=@'
- @echo off
- set p=c:
- for /f "tokens=*" %%i in ('wmic logicaldisk where "name='%p%'" get DriveType^,Description^,name /value') do (
- for /f "tokens=*" %%j in ("%%i") do set %%j
- )
- echo %name% %Description%
- pause
- '@
-
- $pscode=@'
- $st = Get-Date #脚本开头
- Get-Process
- $et = Get-Date #脚本结尾
- ($et - $st).TotalSeconds #计算
- '@
-
- # Todo: 函数 EasySci代码
-
- # 使用函数EasySci
- easysci -code $batcode
-
- easysci -code $pscode
复制代码
作者: jyswjjgdwtdtj 时间: 2023-4-7 22:39
没搞懂你要干什么(当然我没那能力帮你)
作者: Five66 时间: 2023-4-8 06:23
不懂winform,简单弄了下,机器太旧测试不了,不知道行不行,你自己试试看吧,出现找不到类型之类的自己尝试添加下winform或drawing或ScintillaNET.dll- Add-Type -Path "$home\Desktop\EasyScintilla.dll"
-
- $batcode=@'
- @echo off
- set p=c:
- for /f "tokens=*" %%i in ('wmic logicaldisk where "name='%p%'" get DriveType^,Description^,name /value') do (
- for /f "tokens=*" %%j in ("%%i") do set %%j
- )
- echo %name% %Description%
- pause
- '@
-
- $pscode=@'
- $st = Get-Date #脚本开头
- Get-Process
- $et = Get-Date #脚本结尾
- ($et - $st).TotalSeconds #计算
- '@
-
- #不懂ps函数,弄成块了
- $easysci={
- param($thetext,$thetype)
-
- #编辑器设置
- $editor=[EasyScintilla.SimpleEditor]::new()
- $editor.Anchor = ([System.Windows.Forms.AnchorStyles](((([System.Windows.Forms.AnchorStyles]::Top -bor [System.Windows.Forms.AnchorStyles]::Bottom) -bor [System.Windows.Forms.AnchorStyles]::Left) -bor [System.Windows.Forms.AnchorStyles]::Right)))
- $editor.IndentationGuides = [ScintillaNET.IndentView]::LookBoth
- $editor.Location = [System.Drawing.Point]::new(12, 12)
- $editor.Name = "editor"
- $editor.Size = [System.Drawing.Size]::new(854, 603)
- #$editor.Styler = $null
- if($thetype -eq "C#"){$editor.Styler=[EasyScintilla.Stylers.CSharpStyler]::new()}
- if($thetype -eq "C# (Dark)"){$editor.Styler=[EasyScintilla.Stylers.DarkCSharpStyler]::new()}
- if($thetype -eq "Windows Batch"){$editor.Styler=[EasyScintilla.Stylers.BatchStyler]::new()}
- if($thetype -eq "HTML"){$editor.Styler=[EasyScintilla.Stylers.HtmlStyler]::new()}
- if($thetype -eq "JSON"){$editor.Styler=[EasyScintilla.Stylers.JsonStyler]::new()}
- if($thetype -eq "PowerShell"){$editor.Styler=[EasyScintilla.Stylers.PowerShellStyler]::new()}
- if($thetype -eq "Python"){$editor.Styler=[EasyScintilla.Stylers.PythonStyler]::new()}
- if($thetype -eq "Ruby"){$editor.Styler=[EasyScintilla.Stylers.RubyStyler]::new()}
- if($thetype -eq "T-SQL"){$editor.Styler=[EasyScintilla.Stylers.SqlStyler]::new()}
- if($thetype -eq "Teradata Parallel Transporter"){$editor.Styler=[EasyScintilla.Stylers.TptStyler]::new()}
- $editor.Text=$thetext
- $editor.TabIndex = 0
-
- #窗体设置
- $theform=[System.Windows.Forms.Form]::new()
- $theform.SuspendLayout()
- $theform.AutoScaleDimensions=[System.Drawing.SizeF]::new(6, 13)
- $theform.AutoScaleMode=[System.Windows.Forms.AutoScaleMode]::font
- $theform.ClientSize=[System.Drawing.Size]::new(878, 656)
- $theform.Controls.Add($editor)
- $theform.Name = "Form1"
- $theform.Text = "EasyScintilla Test App"
- $theform.ResumeLayout($false)
-
- #显示窗体,模态
- $theform.ShowDialog()
-
- #清空
- $editor=$null
- $theform.Dispose()
- $theform=$null
-
- #返回
- return 0
- }
-
- #调用块,参数1为文本字符串,参数2为语言样式字符串
- $easysci.Invoke($batcode,'Windows Batch')
- #$easysci.Invoke($pscode,'PowerShell')
复制代码
作者: 小白龙 时间: 2023-4-8 07:12
回复 4# Five66
大佬, 高手, 成了! 太感谢了
作者: 小白龙 时间: 2023-4-8 07:13
本帖最后由 小白龙 于 2023-4-8 07:18 编辑
回复 3# jyswjjgdwtdtj
您也很热心, 帮了我不少忙, 同样感谢
作者: 小白龙 时间: 2023-4-8 07:15
回复 4# Five66
现在, 有个小问题, 关闭窗口后, 没有返回修改后的编辑器中的代码, 是不是要添加一个 确定 按钮, 才行呢? 怎么加呢
作者: Five66 时间: 2023-4-8 08:05
回复 7# 小白龙
在外面添加一个变量,清空前(第59行前)将$editor.Text赋值给这个变量,然后使用这个变量
作者: 小白龙 时间: 2023-4-8 20:06
本帖最后由 小白龙 于 2023-4-8 20:46 编辑
回复 8# Five66
大佬能再帮指导一下吗?
我用的软件虽然可以执行上面的PS脚本, 但是也是用命令行的方式调用的, 执行速度有点慢,
但是软件也能调用DLL, 以前在别的贴子中尝试过, 执行速度很快,
我大致知道了从C#代码转出COM版的DLL文件了, 但是不知道怎样把上面用到的两个CS文件合并为一个CS文件, 确切的说, 不知道怎样转成类库
估计应该要修改原C#代码, 把下拉列表组合框删除, 放上一个ok按钮
然后定义一个函数EasySci 返回值类型为string 参数有两个, 一个是要显示的代码, 另一个是代码类型
public string EasySci (string code, string codeType)
作者: 小白龙 时间: 2023-4-8 20:12
找了很多gpt文章, 没一个能用的, 想尝试问它, 也问不了,
作者: 小白龙 时间: 2023-4-8 20:49
本帖最后由 小白龙 于 2023-4-8 20:52 编辑
回复 4# Five66
大佬, 您改的PS代码,我能看懂, 但是源C#的代码,太啰嗦了, 好几个文件, 还一层套一层的, 搞不懂了
因为要生成类库, 所以不需要main函数, 就用我上面提到的函数名就行, 但是怎么改呢, Program.cs Form1.cs Form1.Designer.cs 这三个文件是不是都得要改一下
作者: Five66 时间: 2023-4-9 06:29
Program.cs 是执行程序代码
Form1.cs 界面交互代码
Form1.Designer.cs 界面设计代码
这三个文件基本上是可以并一起的,只要调整下那些using
至于弄成你说的类库,参考下面的,C#跟winform都只是略懂毛毛雨,不知对不对
EasySci函数(第123行)定义在Nakano类(第105行)中- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using EasyScintilla.Stylers;
-
- using System.IO;
- using System.Reflection;
-
- namespace ExampleProject
- {
- public partial class Form1 : Form
- {
-
- private EasyScintilla.SimpleEditor editor;//编辑器声明
- private System.Windows.Forms.Button theButton;//按钮声明
- private String thertStr //返回字符串声明
-
- ///<summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- ///重定义Form1释放函数
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- //定义Form1关闭事件函数,用于关闭时储存编辑器文本
- private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
-
- //Form1构造函数
- public Form1()
- {
- InitializeComponent();//调用初始化函数
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///初始化函数定义
- /// </summary>
- private void InitializeComponent()
- {
- this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
- this.theButton = new System.Windows.Forms.Button();//创建按钮
- this.SuspendLayout();
-
- //
- // editor设置
- //
- this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
- this.editor.Location = new System.Drawing.Point(12, 12);
- this.editor.Name = "editor";
- this.editor.Size = new System.Drawing.Size(854, 603);
- this.editor.Styler = null;
- this.editor.TabIndex = 0;
-
- //
- // 按钮设置
- //
- this.theButton.Size=new System.Drawing.Size(100, 21);
- this.theButton.Location=new System.Drawing.Point(12, 621);
- this.theButton.Name="button1";
- this.theButton.Text="OK";
-
- //
- // Form1设置
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(878, 656);
- this.Controls.Add(this.theButton);//添加按钮到Form1
- this.Controls.Add(this.editor);//添加编辑器到Form1
- this.Name = "Form1";
- this.Text = "EasyScintilla Test App";
- //this.Load += new System.EventHandler(this.Form1_Load);
- this.Closing += new System.EventHandler(this.Form1_Closing);//添加关闭事件
- this.ResumeLayout(false);
- }
- #endregion
- }
-
- //========================================
- //========================================
- public class Nakano{
-
- //语言样式字段
- private Hashtable _theStyler=new Hashtable();
- _theStyler.Add("C#", new CSharpStyler());
- _theStyler.Add("C# (Dark)", new DarkCSharpStyler());
- _theStyler.Add("Windows Batch" new BatchStyler());
- _theStyler.Add("HTML", new HtmlStyler());
- _theStyler.Add("JSON", new JsonStyler());
- _theStyler.Add("PowerShell", new PowerShellStyler());
- _theStyler.Add("Python", new PythonStyler());
- _theStyler.Add("Ruby", new RubyStyler());
- _theStyler.Add("T-SQL", new SqlStyler());
- _theStyler.Add("Teradata Parallel Transporter", new TptStyler());
-
- //语言样式属性
- public static Hashtable TheStyler{get {return _theStyler;}}
-
- public static string EasySci (string code, string codeType)
- {
- var theForm1=new Form1();
- string theStr='';
- if(_theStyler.ContainsKey(codeType))
- {
- theForm1.editor.Styler=_theStyler[codeType];
- }
-
- theForm1.editor.Text=code;
-
- theForm1.ShowDialog();
-
- theStr=new String(theForm1.thertStr);
-
- theForm1.Dispose();
-
- return theStr;
- }
- }
- //========================================
- //========================================
- }
复制代码
作者: 小白龙 时间: 2023-4-9 07:19
回复 12# Five66
多谢大佬,
109-118行, 都报下面的错误
error CS1519: 类、结构或接口成员声明中的标记“(”无效
error CS1520: 方法必须具有返回类型
error CS1002: 应输入 ;
作者: 小白龙 时间: 2023-4-9 08:48
本帖最后由 小白龙 于 2023-4-9 08:50 编辑
回复 12# Five66
问了一下gpt
这段代码中有以下几个问题:
在定义语言样式字段 _theStyler 时,应该在方法或构造函数中进行初始化,而不是在类体外进行初始化。
在定义语言样式字段 _theStyler 时,缺少逗号。
在 EasySci 方法中使用 _theStyler 时,应该使用 Nakano._theStyler,因为 _theStyler 是 Nakano 类的字段。
在调用 Dispose() 方法之前,应该先隐藏窗口并将其设置为不可见。
下面是修改后的代码:- using System;
- using System.Collections;
- using System.Windows.Forms;
- using EasyScintilla.Stylers;
-
- namespace ExampleProject
- {
- public partial class Form1 : Form
- {
- private readonly EasyScintilla.SimpleEditor editor;//编辑器声明
- private readonly Button theButton;//按钮声明
- public string ThertStr; //返回字符串声明
-
- /// <summary>
- /// Required designer variable.
- /// </summary>
- private readonly System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- ///重定义Form1释放函数
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- //定义Form1关闭事件函数,用于关闭时储存编辑器文本
- private void Form1_Closing(object sender, EventArgs e)
- {
- ThertStr = editor.Text;
- }
-
- //Form1构造函数
- public Form1()
- {
- InitializeComponent();//调用初始化函数
- editor = new EasyScintilla.SimpleEditor();//创建编辑器
- theButton = new Button();//创建按钮
- this.SuspendLayout();
- //
- // editor设置
- //
- editor.Anchor = ((AnchorStyles) (((AnchorStyles.Top | AnchorStyles.Bottom)
- | AnchorStyles.Left)
- | AnchorStyles.Right));
- editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
- editor.Location = new System.Drawing.Point(12, 12);
- editor.Name = "editor";
- editor.Size = new System.Drawing.Size(854, 603);
- editor.Styler = null;
- editor.TabIndex = 0;
- //
- // 按钮设置
- //
- theButton.Size=new System.Drawing.Size(100, 21);
- theButton.Location=new System.Drawing.Point(12, 621);
- theButton.Name="button1";
- theButton.Text="OK";
- this.Controls.Add(theButton);//添加按钮到Form1
- this.Controls.Add(editor);//添加编辑器到Form1
- this.ResumeLayout(false);
- }
- }
- //========================================
- public class Nakano {
- //语言样式字段
- private static readonly Hashtable _theStyler=new Hashtable() {
- {"C#", new CSharpStyler()},
- {"C# (Dark)", new DarkCSharpStyler()},
- {"Windows Batch", new BatchStyler()},
- {"HTML", new HtmlStyler()},
- {"JSON", new JsonStyler()},
- {"PowerShell", new PowerShellStyler()},
- {"Python", new PythonStyler()},
- {"Ruby", new RubyStyler()},
- {"T-SQL", new SqlStyler()},
- {"Teradata Parallel Transporter", new TptStyler()}
- };
-
- //语言样式属性
- public static Hashtable TheStyler => _theStyler;
-
- public static string EasySci(string code, string codeType)
- {
- var theForm1 = new Form1();
- var theStr = "";
- if (_theStyler.ContainsKey(codeType))
- {
- theForm1.editor.Styler = (IStyler) _theStyler[codeType];
- }
-
- theForm1.editor.Text = code;
-
- theForm1.ShowDialog();
-
- theStr = theForm1.ThertStr;
-
- theForm1.Hide();
- theForm1.Visible = false;
- theForm1.Dispose();
-
- return theStr;
- }
- }
- //========================================
- }
复制代码
作者: 小白龙 时间: 2023-4-9 08:53
回复 12# Five66
GPT答案, 下面这行,还是提示有错误
//语言样式属性
public static Hashtable TheStyler => _theStyler;
--------------------------------------------------------------------
error CS1002: 应输入 ;
error CS1519: 类、结构或接口成员声明中的标记“;”无效.
作者: Five66 时间: 2023-4-9 08:59
试试原来108行后面所有换成下面的- private static Hashtable _theStyler=new Hashtable();
- private static int _initiga=0;
- private static void theInit(){
- _theStyler.Add("C#", new CSharpStyler());
- _theStyler.Add("C# (Dark)", new DarkCSharpStyler());
- _theStyler.Add("Windows Batch" ,new BatchStyler());
- _theStyler.Add("HTML", new HtmlStyler());
- _theStyler.Add("JSON", new JsonStyler());
- _theStyler.Add("PowerShell", new PowerShellStyler());
- _theStyler.Add("Python", new PythonStyler());
- _theStyler.Add("Ruby", new RubyStyler());
- _theStyler.Add("T-SQL", new SqlStyler());
- _theStyler.Add("Teradata Parallel Transporter", new TptStyler());
- }
- //语言样式属性
- public static Hashtable TheStyler{
- get {
- if(_initiga==0){theInit();_initiga=1;return _theStyler;}
- return _theStyler;}}
-
- public static string EasySci (string code, string codeType)
- {
- if(_initiga==0){_initiga=1;theInit();}
- var theForm1=new Form1();
- StringBuilder theStr;
- if(_theStyler.ContainsKey(codeType))
- {
- theForm1.editor.Styler=_theStyler[codeType];
- }
-
- theForm1.editor.Text=code;
-
- theForm1.ShowDialog();
-
- theStr=new StringBuilder(theForm1.thertStr);
-
- theForm1.Dispose();
-
- return theStr.ToString();
- }
- }
- //========================================
- //========================================
- }
复制代码
作者: 小白龙 时间: 2023-4-9 09:32
回复 16# Five66
theForm1.editor.Styler=_theStyler[codeType];
会报错
error CS0266: 无法将类型“object”隐式转换为“EasyScintilla.Stylers.ScintillaStyler”。存在一个显式转换(是否缺少强制转换?).
我改成
theForm1.editor.Styler=(ScintillaStyler)_theStyler[codeType];
不报错了, 但是又报下面的错了, 两个dll都引用了EasyScintilla.dll ScintillaNET.dll
Could not load the Scintilla module at the path 'C:\Users\Administrator\AppData\Local\Temp\ScintillaNET\3.6.3\x86\SciLexer.dll'.
在 ScintillaNET.Scintilla.get_CreateParams()
在 System.Windows.Forms.Control..ctor(Boolean autoInstallSyncContext)
在 ScintillaNET.Scintilla..ctor()
在 EasyScintilla.SimpleEditor..ctor()
在 ExampleProject.Form1.InitializeComponent()
在 ExampleProject.Form1..ctor()
在 ExampleProject.Nakano.EasySci(String code, String codeType).
作者: 小白龙 时间: 2023-4-9 09:35
回复 16# Five66
是不是要把 EasyScintilla文件夹下的SimpleEditor.cs文件也合并进来? 这个文件太大了10K
感觉是不是哪里有问题, 用powershell几行代码就搞定了, 但用C#有点复杂, 是不是不合并也行呢?
powershell代码只需要那两个dll就行了
作者: 小白龙 时间: 2023-4-9 09:39
private EasyScintilla.SimpleEditor editor;//编辑器声明
private System.Windows.Forms.Button theButton;//按钮声明
private String thertStr; //返回字符串声明
我也改成了下面这样, 不然会提示 不可访问,因为它受保护级别限制
public EasyScintilla.SimpleEditor editor;//编辑器声明
public System.Windows.Forms.Button theButton;//按钮声明
public String thertStr; //返回字符串声明
作者: Five66 时间: 2023-4-9 10:00
代码编译依赖 EasyScintilla.dll , 编译运行后也依赖 EasyScintilla.dll
EasyScintilla.dll 运行依赖 ScintillaNET.dll
ScintillaNET.dll 运行依赖 SciLexer.dll (大概)
按理来说改成
(ScintillaStyler)_theStyler[codeType];
和那些 public XXX
应该能通过编译的
作者: 小白龙 时间: 2023-4-9 10:02
本帖最后由 小白龙 于 2023-4-9 10:03 编辑
回复 20# Five66
C:\Users\Administrator\AppData\Local\Temp\ScintillaNET\3.6.3\x86\SciLexer.dll
我在报错的这个路径下看了一下, 是有这个dll文件的, 这个文件, 应该是打包在ScintillaNET.dll中了, 执行的时候就解包了?
作者: Five66 时间: 2023-4-9 10:06
回复 21# 小白龙
试试开头再加上一句
using EasyScintilla:
作者: Five66 时间: 2023-4-9 10:07
回复 21# 小白龙
你用的啥编译的?最好发下编译错误的图来看看
作者: Five66 时间: 2023-4-9 10:14
回复 23# Five66
看路径,你的SciLexer.dll是应该是32位的,试试编译32位的
作者: 小白龙 时间: 2023-4-9 10:35
本帖最后由 小白龙 于 2023-4-9 10:39 编辑
回复 24# Five66
应该就是32位的, 这个好像没有64似的
https://github.com/jacobslusser/ScintillaNET/releases/tag/v3.6.3
对了, 忘了一点, 我的软件它只支持调用32位的dll 会不会咱们上面两个dll都是64位的? 怎么看是不是64位的dll呢
好像v3的时候, 没有64位的版本的dll
作者: Five66 时间: 2023-4-9 10:59
回复 25# 小白龙
那就编译成32位的,用自带的C#编译器试了下,能成功编译成dll
编译编译命令为(csc改成自己系统的csc路径)- csc /r:EasyScintilla.dll /r:ScintillaNET.dll /target:library "new 1"
复制代码
代码文件"new 1"跟 EasyScintilla.dll 和 ScintillaNET.dll 放在同一文件夹(只有这3个文件)
还有代码文件改了下,看下面的- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using EasyScintilla.Stylers;
- using EasyScintilla;
-
- using System.IO;
- using System.Reflection;
-
- namespace ExampleProject
- {
- public partial class Form1 : Form
- {
-
- public EasyScintilla.SimpleEditor editor;//编辑器声明
- public System.Windows.Forms.Button theButton;//按钮声明
- public String thertStr; //返回字符串声明
-
- ///<summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- ///重定义Form1释放函数
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- //定义Form1关闭事件函数,用于关闭时储存编辑器文本
- private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
-
- //Form1构造函数
- public Form1()
- {
- InitializeComponent();//调用初始化函数
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///初始化函数定义
- /// </summary>
- private void InitializeComponent()
- {
- this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
- this.theButton = new System.Windows.Forms.Button();//创建按钮
- this.SuspendLayout();
-
- //
- // editor设置
- //
- this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
- this.editor.Location = new System.Drawing.Point(12, 12);
- this.editor.Name = "editor";
- this.editor.Size = new System.Drawing.Size(854, 603);
- this.editor.Styler = null;
- this.editor.TabIndex = 0;
-
- //
- // 按钮设置
- //
- this.theButton.Size=new System.Drawing.Size(100, 21);
- this.theButton.Location=new System.Drawing.Point(12, 621);
- this.theButton.Name="button1";
- this.theButton.Text="OK";
-
- //
- // Form1设置
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(878, 656);
- this.Controls.Add(this.theButton);//添加按钮到Form1
- this.Controls.Add(this.editor);//添加编辑器到Form1
- this.Name = "Form1";
- this.Text = "EasyScintilla Test App";
- //this.Load += new System.EventHandler(this.Form1_Load);
- this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);//添加关闭事件
- this.ResumeLayout(false);
- }
- #endregion
- }
-
- //========================================
- //========================================
- public class Nakano{
-
- //语言样式字段
- private static Hashtable _theStyler=new Hashtable();
- private static int _initiga=0;
- private static void theInit(){
- _theStyler.Add("C#", new CSharpStyler());
- _theStyler.Add("C# (Dark)", new DarkCSharpStyler());
- _theStyler.Add("Windows Batch" ,new BatchStyler());
- _theStyler.Add("HTML", new HtmlStyler());
- _theStyler.Add("JSON", new JsonStyler());
- _theStyler.Add("PowerShell", new PowerShellStyler());
- _theStyler.Add("Python", new PythonStyler());
- _theStyler.Add("Ruby", new RubyStyler());
- _theStyler.Add("T-SQL", new SqlStyler());
- _theStyler.Add("Teradata Parallel Transporter", new TptStyler());
- }
- //语言样式属性
- public static Hashtable TheStyler{
- get {
- if(_initiga==0){theInit();_initiga=1;return _theStyler;}
- return _theStyler;}}
-
- public static string EasySci (string code, string codeType)
- {
- if(_initiga==0){_initiga=1;theInit();}
- var theForm1=new Form1();
- StringBuilder theStr;
- if(_theStyler.ContainsKey(codeType))
- {
- theForm1.editor.Styler=(ScintillaStyler)_theStyler[codeType];
- }
-
- theForm1.editor.Text=code;
-
- theForm1.ShowDialog();
-
- theStr=new StringBuilder(theForm1.thertStr);
-
- theForm1.Dispose();
-
- return theStr.ToString();
- }
- }
- //========================================
- //========================================
- }
复制代码
作者: Five66 时间: 2023-4-9 11:01
回复 26# Five66
差点忘了,我用32位系统编译的,64位系统建议下载dotnet编译成32位的
作者: 小白龙 时间: 2023-4-9 11:11
本帖最后由 小白龙 于 2023-4-9 11:12 编辑
回复 26# Five66
多谢大佬, 我用软件带的编译工具编译的, 不成功
用您刚才上面的代码和命令可以编译成功, 因为软件带的编译工具可以转成com的dll
如果不用带的编译工具, 而用VS2022来编译生成com, 我应该怎么做呢? 我的软件虽然支持DLL, 但是只支持com的, 不支持.net的dll, 要添加GUID参数什么的
作者: Five66 时间: 2023-4-9 11:12
回复 27# Five66
哦不对,是64位,64位系统的csc能成功编译
系统自带的也有32位的编译器,应该能直接用32位编译器编译32位的,不用再装dotnet
作者: Five66 时间: 2023-4-9 11:14
回复 28# 小白龙
不懂com,一点都不懂,更不用说C#的com了,实在无能为力
作者: 小白龙 时间: 2023-4-9 11:15
回复 29# Five66
我用的下面的命令编译成功的, 我不知道编译成的dll是多少位的, 我的系统是64位win7
但是代码里面没有生成com的参数什么的,生成的dll我的软件还不能用, 不知道, 能不能用命令生成支持com的dll- @echo off
- C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:EasyScintilla.dll /r:ScintillaNET.dll /target:library "sci.cs"
- pause
复制代码
作者: Five66 时间: 2023-4-9 11:17
回复 31# 小白龙
印象中C#的com还要用代码暴露函数的,反正不懂
我只会用com
不会弄com
作者: 小白龙 时间: 2023-4-9 11:17
我的软件在虚拟机里运行, 启动ps的速度慢不少, 不然就不用这么折腾了
但是以前自己生成过支持的com的dll, 用着速度很快
作者: 小白龙 时间: 2023-4-9 11:23
本帖最后由 小白龙 于 2023-4-9 11:25 编辑
回复 32# Five66
我以前按下面这个教程生成过com的dll 生成的能用, 看样子, 好像就是在名字空间下放了三行代码, 但这是用的VS生成的, 现在打开ExampleProject项目后, 不知道怎么操作了, 因为咱们新生成了一个cs文件
https://www.cnblogs.com/jasonery/p/7987050.html
作者: 小白龙 时间: 2023-4-9 12:45
回复 32# Five66
大佬, 用下面的代码, 可以执行了, 但是点ok按钮, 窗口不关闭- $batcode=@'
- @echo off
- set p=c:
- for /f "tokens=*" %%i in ('wmic logicaldisk where "name='%p%'" get DriveType^,Description^,name /value') do (
- for /f "tokens=*" %%j in ("%%i") do set %%j
- )
- echo %name% %Description%
- pause
- '@
- Add-Type -Path "C:\Users\Administrator\Desktop\o\sci.dll"
- [ExampleProject.Nakano]::EasySci($batcode,'Windows Batch')
复制代码
作者: Five66 时间: 2023-4-9 13:07
回复 35# 小白龙
因为代码里本来就没有添加按钮的鼠标点击事件,点击后啥都不会做,自己在代码里参考Form1的加上去吧
作者: Five66 时间: 2023-4-9 13:17
回复 34# 小白龙
看了好多网上的com教程,特么全都是用vs的,细节压根就搞不懂
试试照着下面连接来吧
https://www.jianshu.com/p/be7f61ba7c86
新建的名字用 ExampleProject , 自行添加 EasyScintilla.dll 和 ScintillaNET.dll 引用
代码用下面的(第108行起)- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using EasyScintilla.Stylers;
- using EasyScintilla;
-
- using System.IO;
- using System.Reflection;
- using System.Runtime.InteropServices;
-
- namespace ExampleProject
- {
- public partial class Form1 : Form
- {
-
- public EasyScintilla.SimpleEditor editor;//编辑器声明
- public System.Windows.Forms.Button theButton;//按钮声明
- public String thertStr; //返回字符串声明
-
- ///<summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- ///重定义Form1释放函数
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- //定义Form1关闭事件函数,用于关闭时储存编辑器文本
- private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
-
- //Form1构造函数
- public Form1()
- {
- InitializeComponent();//调用初始化函数
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///初始化函数定义
- /// </summary>
- private void InitializeComponent()
- {
- this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
- this.theButton = new System.Windows.Forms.Button();//创建按钮
- this.SuspendLayout();
-
- //
- // editor设置
- //
- this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
- this.editor.Location = new System.Drawing.Point(12, 12);
- this.editor.Name = "editor";
- this.editor.Size = new System.Drawing.Size(854, 603);
- this.editor.Styler = null;
- this.editor.TabIndex = 0;
-
- //
- // 按钮设置
- //
- this.theButton.Size=new System.Drawing.Size(100, 21);
- this.theButton.Location=new System.Drawing.Point(12, 621);
- this.theButton.Name="button1";
- this.theButton.Text="OK";
-
- //
- // Form1设置
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(878, 656);
- this.Controls.Add(this.theButton);//添加按钮到Form1
- this.Controls.Add(this.editor);//添加编辑器到Form1
- this.Name = "Form1";
- this.Text = "EasyScintilla Test App";
- //this.Load += new System.EventHandler(this.Form1_Load);
- this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);//添加关闭事件
- this.ResumeLayout(false);
- }
- #endregion
- }
-
- //========================================
- //========================================
- [Guid("E2032C8D-2E32-4415-8E8C-CFACBCAAADFF")]
- public interface TheCom{
- [DispId(1)]
- public string EasySci (string code, string codeType);
- }
-
- [Guid("BF4EFCF8-8F67-46F2-A84F-E88C8C3DD777"),
- ClassInterface(ClassInterfaceType.None)]//,
- //ComSourceInterfaces(typeof(TheCom))]
- [ProgId("ExampleProject.Application")]
-
- public class Nakano : TheCom{
-
- public string EasySci (string code, string codeType)
- {
- Hashtable theStyler=new Hashtable();
- theStyler.Add("C#", new CSharpStyler());
- theStyler.Add("C# (Dark)", new DarkCSharpStyler());
- theStyler.Add("Windows Batch" ,new BatchStyler());
- theStyler.Add("HTML", new HtmlStyler());
- theStyler.Add("JSON", new JsonStyler());
- theStyler.Add("PowerShell", new PowerShellStyler());
- theStyler.Add("Python", new PythonStyler());
- theStyler.Add("Ruby", new RubyStyler());
- theStyler.Add("T-SQL", new SqlStyler());
- theStyler.Add("Teradata Parallel Transporter", new TptStyler());
- var theForm1=new Form1();
- StringBuilder theStr;
- if(_theStyler.ContainsKey(codeType))
- {
- theForm1.editor.Styler=(ScintillaStyler)_theStyler[codeType];
- }
- theForm1.editor.Text=code;
- theForm1.ShowDialog();
- theStr=new StringBuilder(theForm1.thertStr);
- theForm1.Dispose();
- return theStr.ToString();
- }
- }
- //========================================
- //========================================
- }
复制代码
作者: 小白龙 时间: 2023-4-9 13:18
本帖最后由 小白龙 于 2023-4-9 13:19 编辑
回复 36# Five66
好的, 不加也行, 直接关窗口也能输出了
前面那个报x86 dll错误, 感觉应该是版本的问题, 我在powershell调用成功时, 临时解压的文件如下, 不是以前报错的那个x86\SciLexer.dll 但是想解决这个问题, 这x86的dll从哪里找呢
"C:\Users\Administrator\AppData\Local\Temp\ScintillaNET\3.6.3\x64\SciLexer.dll"
难道我生成的dll不是x86的吗? 我的软件支持的dll只能是x86的, x64的不行, 这点可以确认
作者: Five66 时间: 2023-4-9 13:33
回复 38# 小白龙
SciLexer.dll应该是EasyScintilla.dll调用ScintillaNET.dll时,由ScintillaNET.dll生成的吧
报错问题搞不懂
vs的生成设置里可以设置32或64吧
自带编译器看所在目录:Framework64下的csc是64位,Framework下的csc是32位
作者: 小白龙 时间: 2023-4-9 13:44
本帖最后由 小白龙 于 2023-4-9 13:45 编辑
回复 39# Five66
下面是ScintillaNET说明文档中说的, 和我想的一样, 下面红色字部分, 这么一来, 我的软件只支持x86的dll, 它在调用的dll的时候, 就解出了x86版的SciLexer.DLL 那哪里出问题了呢?
我用的是下面路径的csc这应该是x86版的, 因为还有一个csc文件在 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第二个最常见的ScintillaNET问题是混淆了ScintillaNET DLL及其本地组件SciLexer.DLL。ScintillaNET是一个包装器。没有包含核心闪烁功能的SciLexer.dll,它什么都不是。作为一个本地组件,SciLexer.dll必须为32位和64位版本的Windows分别编译。因此,实际上开发人员必须在应用程序中附带三个dll。
这被证明是一个痛点,因为开发人员通常不希望发布这么多库,或者希望将它们放在另一个位置,这会破坏PInvoke和cintillanet使用的DLL加载机制。由于同样的原因,它在Visual Studio的设计期间也会引起头痛。
为了解决这个问题,现在在ScintillaNET DLL中嵌入了32位和64位版本的SciLexer.DLL。在一个库中运行ScintillaNET所需的所有东西。除了缓解上面提到的痛苦之外,现在我们可以创建一个ScintillaNET NuGet包。
作者: Five66 时间: 2023-4-10 06:49
回复 40# 小白龙
啊,原来搞错了,自带C#编译器csc跟C,C++编译器cl不一样,不管32位还是64位的csc默认编译生成都是AnyCpu(AnyCpu是根据运行系统或调用程序自动适用32位或64位,简单来讲就是二合一)
EasyScintilla.dll 跟 ScintillaNET.dll 也都是AnyCpu (dotnetSDK里的工具CorFlags.exe可以查看,VS有带此工具)
因此出错猜测可能是为了检查类型或Debug附加把SciLexer.dll当成dotnet的dll来解释了(试试换成release)
也有可能为了安全或独立不加载临时目录里的dll(试试直接复制到项目对应的目录里)
作者: 小白龙 时间: 2023-4-10 11:17
本帖最后由 小白龙 于 2023-4-10 11:20 编辑
回复 41# Five66
感谢大佬, 我被搞的筋疲力尽了快, 太难了
我用x86版的 powershell ISE 执行代码, 临时目录里也有那个x86 的 dll , 也能正常运行,
但是把C#代码按网上教程转成com的dll就不行了, 总是报错
scintillaNET看官方说明中, 它就是把x86和x64的dll整到一块的
作者: Five66 时间: 2023-4-11 09:39
回复 42# 小白龙
终于搞懂大部分细节啦,有兴趣就按下面的试试看吧
将最下面代码复制粘贴并保存,并将ScintillaNET.dll , EasyScintilla.dll跟代码文件放在同一文件夹(只有这3个文件),
然后打开cmd,定位到当前目录,用自带编译器编译成dll (thecom为代码文件 , csc路径改成自己的)- csc /r:ScintillaNET.dll /r:EasyScintilla.dll /target:library thecom
复制代码
接着用sn.exe生成强名key文件,thekey.snk是key文件名
(sn.exe路径改成自己的,sn.exe是dotnetSDK的工具,vs自带)复制代码
然后用ildasm.exe反编译之前生成的dll,thecom.dll是之前生成的dll名字, thecom.il是输出的il文件名
(ildasm.exe路径改成自己的,ildasm.exe是dotnetSDK的工具,vs自带)- ildasm.exe thecom.dll /OUT:thecom.il
复制代码
删掉之前生成的dll
接着用自带的 il 编译器将 il 文件和 res 文件和 key 文件一起重新编译成 dll 文件
(ilasm路径改成自己的,系统自带)- ilasm thecom.il /DLL /OUTPUT=thecom.dll /KEY=thekey.snk /RESOURCE=thecom.res
复制代码
最后注册 dll (需要管理员权限)
(regasm系统自带 , gacutil.exe是dotnetSDK的工具,vs自带,路径都改成自己的)- regasm thecom.dll
- gacutil.exe /i thecom.dll
复制代码
完了之后就测试实际代码能不能用吧(估计不行)
ProgId是ExampleProject.Application
ps 中的话是 new-object -comobject ExampleProject.Application
cs代码:- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- using EasyScintilla.Stylers;
- using EasyScintilla;
-
- using System.IO;
- using System.Reflection;
- using System.Runtime.InteropServices;
-
- namespace ExampleProject
- {
- public partial class Form1 : Form
- {
-
- public EasyScintilla.SimpleEditor editor;//编辑器声明
- public System.Windows.Forms.Button theButton;//按钮声明
- public String thertStr; //返回字符串声明
-
- ///<summary>
- /// Required designer variable.
- /// </summary>
- private System.ComponentModel.IContainer components = null;
-
- /// <summary>
- /// Clean up any resources being used.
- ///重定义Form1释放函数
- /// </summary>
- /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- //定义Form1关闭事件函数,用于关闭时储存编辑器文本
- private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
-
- //Form1构造函数
- public Form1()
- {
- InitializeComponent();//调用初始化函数
- }
-
- #region Windows Form Designer generated code
-
- /// <summary>
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///初始化函数定义
- /// </summary>
- private void InitializeComponent()
- {
- this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
- this.theButton = new System.Windows.Forms.Button();//创建按钮
- this.SuspendLayout();
-
- //
- // editor设置
- //
- this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
- | System.Windows.Forms.AnchorStyles.Left)
- | System.Windows.Forms.AnchorStyles.Right)));
- this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
- this.editor.Location = new System.Drawing.Point(12, 12);
- this.editor.Name = "editor";
- this.editor.Size = new System.Drawing.Size(854, 603);
- this.editor.Styler = null;
- this.editor.TabIndex = 0;
-
- //
- // 按钮设置
- //
- this.theButton.Size=new System.Drawing.Size(100, 21);
- this.theButton.Location=new System.Drawing.Point(12, 621);
- this.theButton.Name="button1";
- this.theButton.Text="OK";
-
- //
- // Form1设置
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.ClientSize = new System.Drawing.Size(878, 656);
- this.Controls.Add(this.theButton);//添加按钮到Form1
- this.Controls.Add(this.editor);//添加编辑器到Form1
- this.Name = "Form1";
- this.Text = "EasyScintilla Test App";
- //this.Load += new System.EventHandler(this.Form1_Load);
- this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);//添加关闭事件
- this.ResumeLayout(false);
- }
- #endregion
- }
-
- //========================================
- //========================================
- /*
- [ComVisible(true)]
- [Guid("E2032C8D-2E32-4415-8E8C-CFACBCAAADFF")]
- public interface TheCom{
- [DispId(1)]
- string EasySci (string code, string codeType);
- }
- */
-
- [ComVisible(true)]
- [Guid("BF4EFCF8-8F67-46F2-A84F-E88C8C3DD777"),
- ClassInterface(ClassInterfaceType.None)]//,
- //ComSourceInterfaces(typeof(TheCom))]
- [ProgId("ExampleProject.Application")]
-
- public class Nakano{// : TheCom{
-
- public string EasySci (string code, string codeType)
- {
- Hashtable theStyler=new Hashtable();
- theStyler.Add("C#", new CSharpStyler());
- theStyler.Add("C# (Dark)", new DarkCSharpStyler());
- theStyler.Add("Windows Batch" ,new BatchStyler());
- theStyler.Add("HTML", new HtmlStyler());
- theStyler.Add("JSON", new JsonStyler());
- theStyler.Add("PowerShell", new PowerShellStyler());
- theStyler.Add("Python", new PythonStyler());
- theStyler.Add("Ruby", new RubyStyler());
- theStyler.Add("T-SQL", new SqlStyler());
- theStyler.Add("Teradata Parallel Transporter", new TptStyler());
- var theForm1=new Form1();
- StringBuilder theStr;
- if(theStyler.ContainsKey(codeType))
- {
- theForm1.editor.Styler=(ScintillaStyler)theStyler[codeType];
- }
- theForm1.editor.Text=code;
- theForm1.ShowDialog();
- theStr=new StringBuilder(theForm1.thertStr);
- theForm1.Dispose();
- return theStr.ToString();
- }
- }
- //========================================
- //========================================
- }
复制代码
作者: 小白龙 时间: 2023-4-11 12:27
本帖最后由 小白龙 于 2023-4-11 12:30 编辑
回复 43# Five66
多谢大佬热心指导
我现在只装了vs2022就可以操作吗? 还需要别的组件什么的吗?
用自带编译器编译成dll 是用x86的是吧
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |