AutoCAD c# dll中包装其他的dl文件

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using IFoxCAD.Cad;
using IFoxCAD.Collections;
using IFoxCAD.Linq;
using Autodesk.AutoCAD.Runtime;
using System.Reflection;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices.Core;
namespace 嵌入IfoxcadDll测试
{
public class MianClass : IExtensionApplication
{
public void Initialize()
{
var ass = Assembly.GetExecutingAssembly();
Type type = MethodBase.GetCurrentMethod().DeclaringType;
var NameSpaceName = type.Namespace;
var resourceNames = new List<string>() { "IFoxCAD.Basal.dll", "IFoxCAD.Cad.dll", "System.ValueTuple.dll" };
AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
{
try
{
var assName = e.Name.Split(',')[0];
if (resourceNames.Any(c => c == assName + ".dll"))
{
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream($"{NameSpaceName}.Resources.{assName}.dll"))
{
var bytes = new byte[stream.Length];
stream.Read(bytes, 0, (int)stream.Length);
return Assembly.Load(bytes);//加载资源文件中的dll,代替加载失败的程序集
}
}
else
{
Application.ShowAlertDialog($"缺少dll{assName}");
return null;
}
//throw new DllNotFoundException(assName);
}
catch (System.Exception ex)
{
Application.ShowAlertDialog(ex.StackTrace);
return null;
}
};
}
public void Terminate()
{
throw new NotImplementedException();
}
}
public class TestClass
{
[CommandMethod("mytt")]
public void TestClassMethods()
{
DBTrans dbtr = new DBTrans();
Line l = new Line(Point3d.Origin, new Point3d(200, 200, 0));
dbtr.CurrentSpace.AddEntity(l);
}
}
}

 

posted @   南胜NanSheng  阅读(506)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示