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

不懂com,一点都不懂,更不用说C#的com了,实在无能为力

TOP

回复 27# Five66

哦不对,是64位,64位系统的csc能成功编译
系统自带的也有32位的编译器,应该能直接用32位编译器编译32位的,不用再装dotnet

TOP

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

回复 26# Five66

多谢大佬, 我用软件带的编译工具编译的, 不成功

用您刚才上面的代码和命令可以编译成功, 因为软件带的编译工具可以转成com的dll

如果不用带的编译工具, 而用VS2022来编译生成com, 我应该怎么做呢? 我的软件虽然支持DLL, 但是只支持com的, 不支持.net的dll, 要添加GUID参数什么的

TOP

回复 26# Five66

差点忘了,我用32位系统编译的,64位系统建议下载dotnet编译成32位的

TOP

回复 25# 小白龙
那就编译成32位的,用自带的C#编译器试了下,能成功编译成dll

编译编译命令为(csc改成自己系统的csc路径)
  1. csc  /r:EasyScintilla.dll /r:ScintillaNET.dll /target:library "new 1"
复制代码
代码文件"new 1"跟 EasyScintilla.dll 和 ScintillaNET.dll 放在同一文件夹(只有这3个文件)

还有代码文件改了下,看下面的
  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. namespace ExampleProject
  16. {
  17.     public partial class Form1 : Form
  18.     {
  19.         public EasyScintilla.SimpleEditor editor;//编辑器声明
  20.         public System.Windows.Forms.Button theButton;//按钮声明
  21.         public String thertStr; //返回字符串声明
  22.          ///<summary>
  23.         /// Required designer variable.
  24.         /// </summary>
  25.         private System.ComponentModel.IContainer components = null;
  26.         /// <summary>
  27.         /// Clean up any resources being used.
  28.         ///重定义Form1释放函数
  29.         /// </summary>
  30.         /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
  31.         protected override void Dispose(bool disposing)
  32.         {
  33.             if (disposing && (components != null))
  34.             {
  35.                 components.Dispose();
  36.             }
  37.             base.Dispose(disposing);
  38.         }
  39.         //定义Form1关闭事件函数,用于关闭时储存编辑器文本
  40.         private void Form1_Closing(object sender, EventArgs e){thertStr=editor.Text;}
  41.         //Form1构造函数
  42.         public Form1()
  43.         {
  44.             InitializeComponent();//调用初始化函数
  45.         }
  46.         #region Windows Form Designer generated code
  47.         /// <summary>
  48.         /// Required method for Designer support - do not modify
  49.         /// the contents of this method with the code editor.
  50.         ///初始化函数定义
  51.         /// </summary>
  52.         private void InitializeComponent()
  53.         {
  54.             this.editor = new EasyScintilla.SimpleEditor();//创建编辑器
  55.             this.theButton = new System.Windows.Forms.Button();//创建按钮
  56.             this.SuspendLayout();
  57.             //
  58.             // editor设置
  59.             //
  60.             this.editor.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
  61.             | System.Windows.Forms.AnchorStyles.Left)
  62.             | System.Windows.Forms.AnchorStyles.Right)));
  63.             this.editor.IndentationGuides = ScintillaNET.IndentView.LookBoth;
  64.             this.editor.Location = new System.Drawing.Point(12, 12);
  65.             this.editor.Name = "editor";
  66.             this.editor.Size = new System.Drawing.Size(854, 603);
  67.             this.editor.Styler = null;
  68.             this.editor.TabIndex = 0;
  69.             //
  70.             // 按钮设置
  71.             //
  72.             this.theButton.Size=new System.Drawing.Size(100, 21);
  73.             this.theButton.Location=new System.Drawing.Point(12, 621);
  74.             this.theButton.Name="button1";
  75.             this.theButton.Text="OK";
  76.             //
  77.             // Form1设置
  78.             //
  79.             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
  80.             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  81.             this.ClientSize = new System.Drawing.Size(878, 656);
  82.             this.Controls.Add(this.theButton);//添加按钮到Form1
  83.             this.Controls.Add(this.editor);//添加编辑器到Form1
  84.             this.Name = "Form1";
  85.             this.Text = "EasyScintilla Test App";
  86.             //this.Load += new System.EventHandler(this.Form1_Load);
  87.             this.Closing += new System.ComponentModel.CancelEventHandler(this.Form1_Closing);//添加关闭事件
  88.             this.ResumeLayout(false);
  89.         }
  90.         #endregion
  91.     }
  92. //========================================
  93. //========================================
  94. public class Nakano{
  95. //语言样式字段
  96. private static Hashtable _theStyler=new Hashtable();
  97. private static int _initiga=0;
  98. private static void theInit(){
  99. _theStyler.Add("C#", new CSharpStyler());
  100. _theStyler.Add("C# (Dark)", new DarkCSharpStyler());
  101. _theStyler.Add("Windows Batch" ,new BatchStyler());
  102. _theStyler.Add("HTML",  new HtmlStyler());
  103. _theStyler.Add("JSON",  new JsonStyler());
  104. _theStyler.Add("PowerShell",  new PowerShellStyler());
  105. _theStyler.Add("Python", new PythonStyler());
  106. _theStyler.Add("Ruby", new RubyStyler());
  107. _theStyler.Add("T-SQL", new SqlStyler());
  108. _theStyler.Add("Teradata Parallel Transporter", new TptStyler());
  109. }
  110. //语言样式属性
  111. public static Hashtable TheStyler{
  112. get {
  113. if(_initiga==0){theInit();_initiga=1;return _theStyler;}
  114. return _theStyler;}}
  115. public static string EasySci (string code, string codeType)
  116. {
  117. if(_initiga==0){_initiga=1;theInit();}
  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

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

TOP

回复 23# Five66

看路径,你的SciLexer.dll是应该是32位的,试试编译32位的

TOP

回复 21# 小白龙
你用的啥编译的?最好发下编译错误的图来看看

TOP

回复 21# 小白龙

试试开头再加上一句
using EasyScintilla:

TOP

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

回复 20# Five66

C:\Users\Administrator\AppData\Local\Temp\ScintillaNET\3.6.3\x86\SciLexer.dll
    我在报错的这个路径下看了一下, 是有这个dll文件的, 这个文件, 应该是打包在ScintillaNET.dll中了, 执行的时候就解包了?

TOP

代码编译依赖 EasyScintilla.dll , 编译运行后也依赖 EasyScintilla.dll
EasyScintilla.dll 运行依赖 ScintillaNET.dll
ScintillaNET.dll 运行依赖 SciLexer.dll (大概)

按理来说改成
(ScintillaStyler)_theStyler[codeType];
和那些 public XXX
应该能通过编译的

TOP

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; //返回字符串声明

TOP

回复 16# Five66


   是不是要把 EasyScintilla文件夹下的SimpleEditor.cs文件也合并进来? 这个文件太大了10K
感觉是不是哪里有问题, 用powershell几行代码就搞定了, 但用C#有点复杂, 是不是不合并也行呢?

powershell代码只需要那两个dll就行了

TOP

回复 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).

TOP

试试原来108行后面所有换成下面的
  1. private static Hashtable _theStyler=new Hashtable();
  2. private static int _initiga=0;
  3. private static void theInit(){
  4. _theStyler.Add("C#", new CSharpStyler());
  5. _theStyler.Add("C# (Dark)", new DarkCSharpStyler());
  6. _theStyler.Add("Windows Batch" ,new BatchStyler());
  7. _theStyler.Add("HTML",  new HtmlStyler());
  8. _theStyler.Add("JSON",  new JsonStyler());
  9. _theStyler.Add("PowerShell",  new PowerShellStyler());
  10. _theStyler.Add("Python", new PythonStyler());
  11. _theStyler.Add("Ruby", new RubyStyler());
  12. _theStyler.Add("T-SQL", new SqlStyler());
  13. _theStyler.Add("Teradata Parallel Transporter", new TptStyler());
  14. }
  15. //语言样式属性
  16. public static Hashtable TheStyler{
  17. get {
  18. if(_initiga==0){theInit();_initiga=1;return _theStyler;}
  19. return _theStyler;}}
  20. public static string EasySci (string code, string codeType)
  21. {
  22. if(_initiga==0){_initiga=1;theInit();}
  23. var theForm1=new Form1();
  24. StringBuilder theStr;
  25. if(_theStyler.ContainsKey(codeType))
  26. {
  27. theForm1.editor.Styler=_theStyler[codeType];
  28. }
  29. theForm1.editor.Text=code;
  30. theForm1.ShowDialog();
  31. theStr=new StringBuilder(theForm1.thertStr);
  32. theForm1.Dispose();
  33. return theStr.ToString();
  34. }
  35. }
  36. //========================================
  37. //========================================
  38. }
复制代码

TOP

返回列表