如何在winform里面运行其他dll?

byrontian 2017-08-09 10:30:02
初次接触二次开发(revit)。

遇到一个问题我在winform里面设置一个按钮,如何可以直接运行一个dll?(不是使用dll里面的方法,而是直接运行整个dll)


revit开发团队给了一个addinmanager,其实就是想在自己写的winform里面实现addinmanager的那个RUN功能。

...全文
379 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dy00544 2017-08-09
  • 打赏
  • 举报
回复
引用 8 楼 byrontian 的回复:
[quote=引用 5 楼 dy00544 的回复:] 一般来说不存在运行整个dll这种说法。 dll一般都是提供一些方法来进行调用的,而不是像应用程序一样从入口点执行。 除非这个dll是以应用程序方式来设计的。
那有没有办法查看这个Addinmanager的功能是如何实现的呢?[/quote] 如果这个程序是c#开发的你可以用ilspy这个程序来反编译。如果你有源代码当然最好。
byrontian 2017-08-09
  • 打赏
  • 举报
回复
引用 10 楼 gac520 的回复:
[quote=引用 9 楼 byrontian 的回复:] [quote=引用 7 楼 xuzuning 的回复:] 那个AddInManager里面这个run 运行的是 CodeForFPOB.ReadParams 方法而不对 整个CodeForFPOB.dll
对哦,那运行的是下面的类,一个.cs?[/quote] 如果运行DLL的方法和属性 这些,完全可以用反射的方式进行展现和调用 目前咱是只接触过DLL的加载,用在大项目的插件模块方式,所有的模块都按照插件的接口去实现, 然后整个程序具备哪些功能,做好这个DLL配置关系即可。。。[/quote] 非常感谢!
浪子-无悔 2017-08-09
  • 打赏
  • 举报
回复
引用 9 楼 byrontian 的回复:
[quote=引用 7 楼 xuzuning 的回复:] 那个AddInManager里面这个run 运行的是 CodeForFPOB.ReadParams 方法而不对 整个CodeForFPOB.dll
对哦,那运行的是下面的类,一个.cs?[/quote] 如果运行DLL的方法和属性 这些,完全可以用反射的方式进行展现和调用 目前咱是只接触过DLL的加载,用在大项目的插件模块方式,所有的模块都按照插件的接口去实现, 然后整个程序具备哪些功能,做好这个DLL配置关系即可。。。
byrontian 2017-08-09
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
那个AddInManager里面这个run 运行的是 CodeForFPOB.ReadParams 方法而不对 整个CodeForFPOB.dll
对哦,那运行的是下面的类,一个.cs?
byrontian 2017-08-09
  • 打赏
  • 举报
回复
引用 5 楼 dy00544 的回复:
一般来说不存在运行整个dll这种说法。 dll一般都是提供一些方法来进行调用的,而不是像应用程序一样从入口点执行。 除非这个dll是以应用程序方式来设计的。
那有没有办法查看这个Addinmanager的功能是如何实现的呢?
xuzuning 2017-08-09
  • 打赏
  • 举报
回复
那个AddInManager里面这个run 运行的是 CodeForFPOB.ReadParams 方法而不对 整个CodeForFPOB.dll
byrontian 2017-08-09
  • 打赏
  • 举报
回复
引用 4 楼 gac520 的回复:
如果没猜错,这个就是跟我上面说的插件模式开发是一样的。。。
嗯,是针对revit的二次开发,类库dll实现的是对软件里面一些元素的读取修改。 我winform也嫁接到revit这个软件里面来了,需要在revit环境才能打开。 所以怎么能实现这个功能呢?
dy00544 2017-08-09
  • 打赏
  • 举报
回复
一般来说不存在运行整个dll这种说法。 dll一般都是提供一些方法来进行调用的,而不是像应用程序一样从入口点执行。 除非这个dll是以应用程序方式来设计的。
浪子-无悔 2017-08-09
  • 打赏
  • 举报
回复
如果没猜错,这个就是跟我上面说的插件模式开发是一样的。。。
byrontian 2017-08-09
  • 打赏
  • 举报
回复
引用 1 楼 gac520 的回复:
你这问的很不清楚呢。。 可能是经验首先,目前就没遇到过直接运行DLL的, 就算是插件式编程方式,自己做的模块dll 也要按照你主程序的接口去实现,然后利用主程序的这个壳去加载DLL的指定界面。。。 一般用DLL都是调用里面的方法的。。
那这个AddInManager里面这个run是什么原理呢,他这个不是运行整个dll吗?
byrontian 2017-08-09
  • 打赏
  • 举报
回复
那这个AddInManager里面这个run是什么原理呢,他这个不是运行整个dll吗?
浪子-无悔 2017-08-09
  • 打赏
  • 举报
回复
你这问的很不清楚呢。。 可能是经验首先,目前就没遇到过直接运行DLL的, 就算是插件式编程方式,自己做的模块dll 也要按照你主程序的接口去实现,然后利用主程序的这个壳去加载DLL的指定界面。。。 一般用DLL都是调用里面的方法的。。
我叫小菜菜 2017-08-09
  • 打赏
  • 举报
回复
运行整个dll?听起来怪怪的。。。。你怎么知道所有东西都“运行”? 其实dll存在的意义,就是提供函数,因为dll的中文名就是动态链接库,Dynamic Link Library。就是一个函数库。 其他程序调用一个入口函数X,具体X干了哪些事情(是否把这个dll封装的所有函数都执行了一遍之类的),需要关心? 只要知道结构,就可以调用。 或者用反射之类的试图模糊查找等等。 实质还是函数调用。 只是分割在不同的文件加载而已,抛去加载部分,和同一个dll的没有区别。
oumiga111 2017-08-09
  • 打赏
  • 举报
回复
其实很简单的!这个我以前专门写过代码测试成功! 1,选新建一个DLL的ClassLibrary 窗体 ,在里面建窗体dFrom1 2,再正常新建一个项目,必须引用第1步生成的ClassLibrary .dll 3,在一个事件下面,输入下面代码

ClassLibrary1.dForm1 showDLLform = new ClassLibrary1.dForm1();
showDLLform.Show();
乱臣贼子 2017-08-09
  • 打赏
  • 举报
回复
使用Windows自带的工具Rundll32.exe进行运行即可,具体详见:http://www.jb51.net/softjc/570.html

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧