乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 4

如何在另一个程序集中使用方法?

[复制链接]

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2020-4-9 12:52:32 | 显示全部楼层 |阅读模式
我有2个项目,首先,我检查Civil 3D是否是当前正在运行的应用程序。如果是,我加载第二个程序集,并在其中使用一个返回单个整数的方法。如果我将第二个项目包含在第一个项目的引用中,它会工作得很好,因为可以看到名称空间和类。但是,当引用和生成C3D程序集时,它们会被复制到生成文件夹中,即使它们被设置为不复制本地。这可以防止该工具在Civil 3D之外运行(如普通Autocad),所以我需要做的是能够用反射调用那个方法,但是我很难得到正确的格式。    var assy = load extension(Name);//这是可行的,程序集已加载。
unitType = (int)assy,GetType(),InvokeMember("GetC3DScalesInt "),BindingFlags。InvokeMethod,null,assy,null);//这将失败,下面包含命名空间和类的情况也是如此。
unitType = (int)assy,GetType(),invoke member(" c3d部分。GetC3DScales.GetC3DScalesInt ",BindingFlags。InvokeMethod,null,assy,null);。
这能做到吗?我是不是找错对象了?谢谢!。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
331
发表于 2020-4-9 13:22:12 | 显示全部楼层
是的,没有问题。我做第二个项目t
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
331
发表于 2020-4-9 13:40:45 | 显示全部楼层
好吧,为什么不现在就添加代码呢
我有两个项目。项目1是主dll,项目2是仅包含在Civil 3D或Map 3D中工作的代码的dll。
项目1:不引用项目2。只创建一个新的命令或鼠标右键菜单项左右。在那里你可以检查你是否在Civil 3D中运行,如果不是,你可以显示一条很好的消息。
如果在Civil 3D中运行,可以加载单独的dll并调用所需的函数:
  1. #if DEBUG
  2.                     string dllFile = FileSystem.Functions.GetMyPath() + @"..\..\..\Project 2\bin\Debug\Project2.dll";
  3. #else
  4.                     string dllFile = FileSystem.Functions.GetMyPath() + "Project2.dll";
  5. #endif
  6.                     if (FileSystem.Functions.FileExist(dllFile) == false)
  7.                     {
  8.                         return ExportResult.ModuleNotFound;
  9.                     }
  10.                     // Load the dll
  11.                     Assembly assembly = Assembly.LoadFrom(dllFile);
  12.                     System.Type assemblyClass = assembly.GetType("Project2");
  13.                     if (assemblyClass == null)
  14.                     {
  15.                         return ExportResult.ModuleNotFound;
  16.                     }
  17.                     // var methodInfo = t.GetMethod("MyFunction", new Type[] { typeof(int), typeof(string) });
  18.                     MethodInfo methodInfo = assemblyClass.GetMethod("MyFunction"); // I don't use parameters here
  19.                     if (methodInfo == null)
  20.                     {
  21.                         return ExportResult.FunctionNotFound;
  22.                     }
  23.                     // object[] constructorParameters = new object[0];
  24.                     // constructorParameters[0] = 999; // First parameter.
  25.                     // constructorParameters[1] = 2;   // Second parameter.
  26.                     // Create Instance of the Class (Constructor)
  27.                     object instance = System.Activator.CreateInstance(assemblyClass, null); // No parameters needed for the constructor so I use null
  28.                     // Function parameters
  29.                     object[] parameters = new object[2];
  30.                     parameters[0] = objectIds;
  31.                     parameters[1] = dataTable;
  32.                     // Run Method with optional parameters (I feed it with objectids and a datatable) en get result back (in this case I return a bool)
  33.                     bool success = System.Convert.ToBoolean(methodInfo.Invoke(instance, parameters));
  34.                     if (success == true)
  35.                     {
  36.                         return ExportResult.Correct;
  37.                     }

效果相当好。
回复

使用道具 举报

71

主题

928

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1230
发表于 2020-4-9 14:03:50 | 显示全部楼层
谢谢你,惠兹!
你的第二个dll类的开始是什么样子的?我正在获取程序集类的空值...我使用了程序集名称和类名,两者都返回 null,因此我一定缺少该类中的某些内容。
划了一下,我发现我必须使用命名空间和类:
Type assemblyClass = assembly。GetType(“C3DPortion.GetC3DScales”);
现在工作完美,再次感谢!
回复

使用道具 举报

14

主题

275

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
331
发表于 2020-4-9 14:55:01 | 显示全部楼层
我很高兴我能帮助
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 03:45 , Processed in 0.148198 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表