[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] 求精通C#和PowerShell的大佬合并C#文件到PS中使用

说来真是折腾,
先是找的AHK的代码高亮组件, 对中文支持不好,
接着找的C++代码, 遇到各种语法问题,
今天在github搜的时候, 找到一个.net组件名字叫EasyScintilla 编译成了exe用了一下, 居然支持8种编程语言语法着色, 完全满足需要, 更重要的时候, 我看了下源代码,  实际代码只要不到七八十行,
重要代码分布在了如下的 Form1.cs和Form1.Designer.cs两个文件中, 怎样把这两个文件合并后, 嵌入到ps中来运行呢? 求路过高手支招, 谢谢
编译后的EXE和源代码在下面链接
https://t.wss.ink/f/awy92us406a 复制链接到浏览器打开
效果展示
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using EasyScintilla.Stylers;
  11. namespace ExampleProject
  12. {
  13.     public partial class Form1 : Form
  14.     {
  15.         private ExampleDisplay[] _examples = new ExampleDisplay[]
  16.         {
  17.             new ExampleDisplay("C#", "cs.txt", new CSharpStyler()),
  18.             new ExampleDisplay("C# (Dark)", "cs.txt", new DarkCSharpStyler()),
  19.             new ExampleDisplay("Windows Batch", "bat.txt", new BatchStyler()),
  20.             new ExampleDisplay("HTML", "html.txt", new HtmlStyler()),
  21.             new ExampleDisplay("JSON", "json.txt", new JsonStyler()),
  22.             new ExampleDisplay("PowerShell", "ps1.txt", new PowerShellStyler()),
  23.             new ExampleDisplay("Python", "py.txt", new PythonStyler()),
  24.             new ExampleDisplay("Ruby", "rb.txt", new RubyStyler()),
  25.             new ExampleDisplay("T-SQL", "sql.txt", new SqlStyler()),
  26.             new ExampleDisplay("Teradata Parallel Transporter", "tpt.txt", new TptStyler()),
  27.         };
  28.         public Form1()
  29.         {
  30.             InitializeComponent();
  31.         }
  32.         private void Form1_Load(object sender, EventArgs e)
  33.         {
  34.             stylerPicker.DataSource = _examples;
  35.             stylerPicker.DisplayMember = "Display";
  36.         }
  37.         private void stylerPicker_SelectedIndexChanged(object sender, EventArgs e)
  38.         {
  39.             var example = _examples[stylerPicker.SelectedIndex];
  40.             editor.Text = example.ReadFile();
  41.             editor.Styler = example.Styler;
  42.         }
  43.     }
  44. }
复制代码
  1. namespace ExampleProject
  2. {
  3.     partial class Form1
  4.     {
  5.         /// <summary>
  6.         /// Required designer variable.
  7.         /// </summary>
  8.         private System.ComponentModel.IContainer components = null;
  9.         /// <summary>
  10.         /// Clean up any resources being used.
  11.         /// </summary>
  12.         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  13.         protected override void Dispose(bool disposing)
  14.         {
  15.             if (disposing && (components != null))
  16.             {
  17.                 components.Dispose();
  18.             }
  19.             base.Dispose(disposing);
  20.         }
  21.         #region Windows Form Designer generated code
  22.         /// <summary>
  23.         /// Required method for Designer support - do not modify
  24.         /// the contents of this method with the code editor.
  25.         /// </summary>
  26.         private void InitializeComponent()
  27.         {
  28.             this.editor = new EasyScintilla.SimpleEditor();
  29.             this.stylerPicker = new System.Windows.Forms.ComboBox();
  30.             this.SuspendLayout();
  31.             //
  32.             // editor
  33.             //
  34.             this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
  35.             | System.Windows.Forms.AnchorStyles.Left)
  36.             | System.Windows.Forms.AnchorStyles.Right)));
  37.             this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
  38.             this.editor.Location = new System.Drawing.Point(12, 12);
  39.             this.editor.Name = "editor";
  40.             this.editor.Size = new System.Drawing.Size(854, 603);
  41.             this.editor.Styler = null;
  42.             this.editor.TabIndex = 0;
  43.             //
  44.             // stylerPicker
  45.             //
  46.             this.stylerPicker.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
  47.             | System.Windows.Forms.AnchorStyles.Right)));
  48.             this.stylerPicker.FormattingEnabled = true;
  49.             this.stylerPicker.Location = new System.Drawing.Point(12, 621);
  50.             this.stylerPicker.Name = "stylerPicker";
  51.             this.stylerPicker.Size = new System.Drawing.Size(854, 21);
  52.             this.stylerPicker.TabIndex = 1;
  53.             this.stylerPicker.SelectedIndexChanged += new System.EventHandler(this.stylerPicker_SelectedIndexChanged);
  54.             //
  55.             // Form1
  56.             //
  57.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  58.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  59.             this.ClientSize = new System.Drawing.Size(878, 656);
  60.             this.Controls.Add(this.stylerPicker);
  61.             this.Controls.Add(this.editor);
  62.             this.Name = "Form1";
  63.             this.Text = "EasyScintilla Test App";
  64.             this.Load += new System.EventHandler(this.Form1_Load);
  65.             this.ResumeLayout(false);
  66.         }
  67.         #endregion
  68.         private EasyScintilla.SimpleEditor editor;
  69.         private System.Windows.Forms.ComboBox stylerPicker;
  70.     }
  71. }
复制代码

本帖最后由 小白龙 于 2023-4-11 12:30 编辑

回复 43# Five66

多谢大佬热心指导

我现在只装了vs2022就可以操作吗? 还需要别的组件什么的吗?

用自带编译器编译成dll 是用x86的是吧

TOP

回复 42# 小白龙

终于搞懂大部分细节啦,有兴趣就按下面的试试看吧

将最下面代码复制粘贴并保存,并将ScintillaNET.dll , EasyScintilla.dll跟代码文件放在同一文件夹(只有这3个文件),
然后打开cmd,定位到当前目录,用自带编译器编译成dll (thecom为代码文件 , csc路径改成自己的)
  1. csc /r:ScintillaNET.dll /r:EasyScintilla.dll  /target:library thecom
复制代码
接着用sn.exe生成强名key文件,thekey.snk是key文件名
(sn.exe路径改成自己的,sn.exe是dotnetSDK的工具,vs自带)
  1. sn.exe -k thekey.snk
复制代码
然后用ildasm.exe反编译之前生成的dll,thecom.dll是之前生成的dll名字, thecom.il是输出的il文件名
(ildasm.exe路径改成自己的,ildasm.exe是dotnetSDK的工具,vs自带)
  1. ildasm.exe thecom.dll /OUT:thecom.il
复制代码
删掉之前生成的dll

接着用自带的 il 编译器将 il 文件和 res 文件和 key 文件一起重新编译成 dll 文件
(ilasm路径改成自己的,系统自带)
  1. ilasm thecom.il /DLL /OUTPUT=thecom.dll /KEY=thekey.snk /RESOURCE=thecom.res
复制代码
最后注册 dll (需要管理员权限)
(regasm系统自带 , gacutil.exe是dotnetSDK的工具,vs自带,路径都改成自己的)
  1. regasm thecom.dll
  2. gacutil.exe /i thecom.dll
复制代码
完了之后就测试实际代码能不能用吧(估计不行)
ProgId是ExampleProject.Application
ps 中的话是 new-object -comobject ExampleProject.Application

cs代码:
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using EasyScintilla.Stylers;
  12. using EasyScintilla;
  13. using System.IO;
  14. using System.Reflection;
  15. using System.Runtime.InteropServices;
  16. namespace ExampleProject
  17. {
  18.     public partial class Form1 : Form
  19.     {
  20.         public EasyScintilla.SimpleEditor editor;//编辑器声明
  21.         public System.Windows.Forms.Button theButton;//按钮声明
  22.         public String thertStr; //返回字符串声明
  23.          ///<summary>
  24.         /// Required designer variable.
  25.         /// </summary>
  26.         private System.ComponentModel.IContainer components = null;
  27.         /// <summary>
  28.         /// Clean up any resources being used.
  29.         ///重定义Form1释放函数
  30.         /// </summary>
  31.         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  32.         protected override void Dispose(bool disposing)
  33.         {
  34.             if (disposing && (components != null))
  35.             {
  36.                 components.Dispose();
  37.             }
  38.             base.Dispose(disposing);
  39.         }
  40.         //定义Form1关闭事件函数,用于关闭时储存编辑器文本
  41.         private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
  42.         //Form1构造函数
  43.         public Form1()
  44.         {
  45.             InitializeComponent();//调用初始化函数
  46.         }
  47.         #region Windows Form Designer generated code
  48.         /// <summary>
  49.         /// Required method for Designer support - do not modify
  50.         /// the contents of this method with the code editor.
  51.         ///初始化函数定义
  52.         /// </summary>
  53.         private void InitializeComponent()
  54.         {
  55.             this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
  56.             this.theButton = new System.Windows.Forms.Button();//创建按钮
  57.             this.SuspendLayout();
  58.             //
  59.             // editor设置
  60.             //
  61.             this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
  62.             | System.Windows.Forms.AnchorStyles.Left)
  63.             | System.Windows.Forms.AnchorStyles.Right)));
  64.             this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
  65.             this.editor.Location = new System.Drawing.Point(12, 12);
  66.             this.editor.Name = "editor";
  67.             this.editor.Size = new System.Drawing.Size(854, 603);
  68.             this.editor.Styler = null;
  69.             this.editor.TabIndex = 0;
  70.             //
  71.             // 按钮设置
  72.             //
  73.             this.theButton.Size=new System.Drawing.Size(100, 21);
  74.             this.theButton.Location=new System.Drawing.Point(12, 621);
  75.             this.theButton.Name="button1";
  76.             this.theButton.Text="OK";
  77.             //
  78.             // Form1设置
  79.             //
  80.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  81.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  82.             this.ClientSize = new System.Drawing.Size(878, 656);
  83.             this.Controls.Add(this.theButton);//添加按钮到Form1
  84.             this.Controls.Add(this.editor);//添加编辑器到Form1
  85.             this.Name = "Form1";
  86.             this.Text = "EasyScintilla Test App";
  87.             //this.Load += new System.EventHandler(this.Form1_Load);
  88.             this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);//添加关闭事件
  89.             this.ResumeLayout(false);
  90.         }
  91.         #endregion
  92.     }
  93. //========================================
  94. //========================================
  95. /*
  96. [ComVisible(true)]
  97. [Guid("E2032C8D-2E32-4415-8E8C-CFACBCAAADFF")]
  98. public interface TheCom{
  99. [DispId(1)]
  100. string EasySci (string code, string codeType);
  101. }
  102. */
  103. [ComVisible(true)]
  104. [Guid("BF4EFCF8-8F67-46F2-A84F-E88C8C3DD777"),
  105. ClassInterface(ClassInterfaceType.None)]//,
  106. //ComSourceInterfaces(typeof(TheCom))]
  107. [ProgId("ExampleProject.Application")]
  108. public class Nakano{// : TheCom{
  109. public string EasySci (string code, string codeType)
  110. {
  111. Hashtable theStyler=new Hashtable();
  112. theStyler.Add("C#", new CSharpStyler());
  113. theStyler.Add("C# (Dark)", new DarkCSharpStyler());
  114. theStyler.Add("Windows Batch" ,new BatchStyler());
  115. theStyler.Add("HTML",  new HtmlStyler());
  116. theStyler.Add("JSON",  new JsonStyler());
  117. theStyler.Add("PowerShell",  new PowerShellStyler());
  118. theStyler.Add("Python", new PythonStyler());
  119. theStyler.Add("Ruby", new RubyStyler());
  120. theStyler.Add("T-SQL", new SqlStyler());
  121. theStyler.Add("Teradata Parallel Transporter", new TptStyler());
  122. var theForm1=new Form1();
  123. StringBuilder theStr;
  124. if(theStyler.ContainsKey(codeType))
  125. {
  126. theForm1.editor.Styler=(ScintillaStyler)theStyler[codeType];
  127. }
  128. theForm1.editor.Text=code;
  129. theForm1.ShowDialog();
  130. theStr=new StringBuilder(theForm1.thertStr);
  131. theForm1.Dispose();
  132. return theStr.ToString();
  133. }
  134. }
  135. //========================================
  136. //========================================
  137. }
复制代码

TOP

本帖最后由 小白龙 于 2023-4-10 11:20 编辑

回复 41# Five66

感谢大佬, 我被搞的筋疲力尽了快, 太难了

我用x86版的 powershell ISE 执行代码, 临时目录里也有那个x86 的 dll , 也能正常运行,
但是把C#代码按网上教程转成com的dll就不行了, 总是报错

scintillaNET看官方说明中, 它就是把x86和x64的dll整到一块的

TOP

回复 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(试试直接复制到项目对应的目录里)

TOP

本帖最后由 小白龙 于 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包。

TOP

回复 38# 小白龙

    SciLexer.dll应该是EasyScintilla.dll调用ScintillaNET.dll时,由ScintillaNET.dll生成的吧
    报错问题搞不懂
    vs的生成设置里可以设置32或64吧
    自带编译器看所在目录:Framework64下的csc是64位,Framework下的csc是32位

TOP

本帖最后由 小白龙 于 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的不行, 这点可以确认

TOP

回复 34# 小白龙

看了好多网上的com教程,特么全都是用vs的,细节压根就搞不懂
试试照着下面连接来吧
https://www.jianshu.com/p/be7f61ba7c86

新建的名字用 ExampleProject , 自行添加 EasyScintilla.dll 和 ScintillaNET.dll 引用
代码用下面的(第108行起)
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using EasyScintilla.Stylers;
  12. using EasyScintilla;
  13. using System.IO;
  14. using System.Reflection;
  15. using System.Runtime.InteropServices;
  16. namespace ExampleProject
  17. {
  18.     public partial class Form1 : Form
  19.     {
  20.         public EasyScintilla.SimpleEditor editor;//编辑器声明
  21.         public System.Windows.Forms.Button theButton;//按钮声明
  22.         public String thertStr; //返回字符串声明
  23.          ///<summary>
  24.         /// Required designer variable.
  25.         /// </summary>
  26.         private System.ComponentModel.IContainer components = null;
  27.         /// <summary>
  28.         /// Clean up any resources being used.
  29.         ///重定义Form1释放函数
  30.         /// </summary>
  31.         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  32.         protected override void Dispose(bool disposing)
  33.         {
  34.             if (disposing && (components != null))
  35.             {
  36.                 components.Dispose();
  37.             }
  38.             base.Dispose(disposing);
  39.         }
  40.         //定义Form1关闭事件函数,用于关闭时储存编辑器文本
  41.         private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
  42.         //Form1构造函数
  43.         public Form1()
  44.         {
  45.             InitializeComponent();//调用初始化函数
  46.         }
  47.         #region Windows Form Designer generated code
  48.         /// <summary>
  49.         /// Required method for Designer support - do not modify
  50.         /// the contents of this method with the code editor.
  51.         ///初始化函数定义
  52.         /// </summary>
  53.         private void InitializeComponent()
  54.         {
  55.             this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
  56.             this.theButton = new System.Windows.Forms.Button();//创建按钮
  57.             this.SuspendLayout();
  58.             //
  59.             // editor设置
  60.             //
  61.             this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
  62.             | System.Windows.Forms.AnchorStyles.Left)
  63.             | System.Windows.Forms.AnchorStyles.Right)));
  64.             this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
  65.             this.editor.Location = new System.Drawing.Point(12, 12);
  66.             this.editor.Name = "editor";
  67.             this.editor.Size = new System.Drawing.Size(854, 603);
  68.             this.editor.Styler = null;
  69.             this.editor.TabIndex = 0;
  70.             //
  71.             // 按钮设置
  72.             //
  73.             this.theButton.Size=new System.Drawing.Size(100, 21);
  74.             this.theButton.Location=new System.Drawing.Point(12, 621);
  75.             this.theButton.Name="button1";
  76.             this.theButton.Text="OK";
  77.             //
  78.             // Form1设置
  79.             //
  80.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  81.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  82.             this.ClientSize = new System.Drawing.Size(878, 656);
  83.             this.Controls.Add(this.theButton);//添加按钮到Form1
  84.             this.Controls.Add(this.editor);//添加编辑器到Form1
  85.             this.Name = "Form1";
  86.             this.Text = "EasyScintilla Test App";
  87.             //this.Load += new System.EventHandler(this.Form1_Load);
  88.             this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);//添加关闭事件
  89.             this.ResumeLayout(false);
  90.         }
  91.         #endregion
  92.     }
  93. //========================================
  94. //========================================
  95. [Guid("E2032C8D-2E32-4415-8E8C-CFACBCAAADFF")]
  96. public interface TheCom{
  97. [DispId(1)]
  98. public string EasySci (string code, string codeType);
  99. }
  100. [Guid("BF4EFCF8-8F67-46F2-A84F-E88C8C3DD777"),
  101. ClassInterface(ClassInterfaceType.None)]//,
  102. //ComSourceInterfaces(typeof(TheCom))]
  103. [ProgId("ExampleProject.Application")]
  104. public class Nakano : TheCom{
  105. public string EasySci (string code, string codeType)
  106. {
  107. Hashtable theStyler=new Hashtable();
  108. theStyler.Add("C#", new CSharpStyler());
  109. theStyler.Add("C# (Dark)", new DarkCSharpStyler());
  110. theStyler.Add("Windows Batch" ,new BatchStyler());
  111. theStyler.Add("HTML",  new HtmlStyler());
  112. theStyler.Add("JSON",  new JsonStyler());
  113. theStyler.Add("PowerShell",  new PowerShellStyler());
  114. theStyler.Add("Python", new PythonStyler());
  115. theStyler.Add("Ruby", new RubyStyler());
  116. theStyler.Add("T-SQL", new SqlStyler());
  117. theStyler.Add("Teradata Parallel Transporter", new TptStyler());
  118. var theForm1=new Form1();
  119. StringBuilder theStr;
  120. if(_theStyler.ContainsKey(codeType))
  121. {
  122. theForm1.editor.Styler=(ScintillaStyler)_theStyler[codeType];
  123. }
  124. theForm1.editor.Text=code;
  125. theForm1.ShowDialog();
  126. theStr=new StringBuilder(theForm1.thertStr);
  127. theForm1.Dispose();
  128. return theStr.ToString();
  129. }
  130. }
  131. //========================================
  132. //========================================
  133. }
复制代码

TOP

回复 35# 小白龙

因为代码里本来就没有添加按钮的鼠标点击事件,点击后啥都不会做,自己在代码里参考Form1的加上去吧

TOP

回复 32# Five66

大佬, 用下面的代码, 可以执行了, 但是点ok按钮, 窗口不关闭
  1. $batcode=@'
  2. @echo off
  3. set p=c:
  4. for /f "tokens=*" %%i in ('wmic logicaldisk where "name='%p%'" get DriveType^,Description^,name  /value') do (
  5.      for /f "tokens=*" %%j in ("%%i") do set %%j
  6. )
  7. echo %name%  %Description%
  8. pause
  9. '@
  10. Add-Type -Path "C:\Users\Administrator\Desktop\o\sci.dll"
  11. [ExampleProject.Nakano]::EasySci($batcode,'Windows Batch')
复制代码

TOP

本帖最后由 小白龙 于 2023-4-9 11:25 编辑

回复 32# Five66


    我以前按下面这个教程生成过com的dll 生成的能用, 看样子, 好像就是在名字空间下放了三行代码, 但这是用的VS生成的, 现在打开ExampleProject项目后, 不知道怎么操作了, 因为咱们新生成了一个cs文件

https://www.cnblogs.com/jasonery/p/7987050.html

TOP

我的软件在虚拟机里运行, 启动ps的速度慢不少, 不然就不用这么折腾了
但是以前自己生成过支持的com的dll, 用着速度很快

TOP

回复 31# 小白龙

印象中C#的com还要用代码暴露函数的,反正不懂
我只会用com
不会弄com

TOP

回复 29# Five66
我用的下面的命令编译成功的, 我不知道编译成的dll是多少位的, 我的系统是64位win7

但是代码里面没有生成com的参数什么的,生成的dll我的软件还不能用, 不知道, 能不能用命令生成支持com的dll
  1. @echo off
  2. C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe  /r:EasyScintilla.dll /r:ScintillaNET.dll /target:library "sci.cs"
  3. pause
复制代码

TOP

返回列表