使用C#程序启动Dll

我有一个C#表单应用程序…我创建了一个Dll …现在我想使用这个程序启动该DLL。 我该怎么做?

#include  typedef int (*function1_ptr) (); function1_ptr function1=NULL; int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { HMODULE myDll = LoadLibrary("Dll1.dll"); if(myDll!=NULL) { function1 = (function1_ptr) GetProcAddress(myDll,"function1"); if(function1!=NULL) function1(); else exit(4); FreeLibrary(myDll); } else exit(6); GetLastError(); return 0; } 

这是用于测试我的DLL的代码…即Dll1.dll .. function1是dll1.dll中的函数…..我可以用C#代码做类似的事吗???

要执行代码示例的操作,请使用以下C#代码:

 public static class DllHelper { [System.Runtime.InteropServices.DllImport("Dll1.dll")] public static extern int function1(); } private void buttonStart_Click(object sender, EventArgs e) { try { DllHelper.function1(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } 

上面的示例是一个C#程序,它调用非基于.NET的DLL中的函数。 下面的示例是一个C#程序,它调用基于.NET的DLL中的函数。

 try { System.Reflection.Assembly dll1 = System.Reflection.Assembly.LoadFile("Dll1.dll"); if (dll1 != null) { object obj = dll1.CreateInstance("Function1Class"); if (obj != null) { System.Reflection.MethodInfo mi = obj.GetType().GetMethod("function1"); mi.Invoke(obj, new object[0]); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } 

你想要的两个例子中的任何一个是什么? 或者您是否尝试从示例代码中调用DLL中的C#函数?

我假设你想使用DLL的function? 如果是这样,请创建对DLL的引用并在C#表单应用程序中使用它。 换句话说,为DLL中包含的应用程序逻辑创建“用户”界面。 如果这没有意义,您应该查找如何添加对项目的引用。

使您的DLL可执行,然后使用诊断中的Process类:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

  Process myProcess = new Process(); try { myProcess.StartInfo.UseShellExecute = false; // You can start any process, HelloWorld is a do-nothing example. myProcess.StartInfo.FileName = "C:\\HelloWorld.exe"; myProcess.StartInfo.CreateNoWindow = true; myProcess.Start(); // This code assumes the process you are starting will terminate itself. // Given that is is started without a window so you cannot terminate it // on the desktop, it must terminate itself or you can do it programmatically // from this application using the Kill method. } catch (Exception e) { Console.WriteLine(e.Message); } 

术语启动和DLL是一些不兼容的概念。 操作系统启动程序,这些程序是具有已定义入口点的二进制文件:主要方法。 DLL更好地被视为具有APIforms的多个入口点的二进制文件。 在这种情况下启动将需要操作系统在这些入口点之间进行选择。

您是否尝试使用DLL中的特定对象? 如果是,请尝试以下操作

  • 右键单击“解决方案资源管理器”中的项目,然后选择“添加引用”
  • 选择“浏览”选项卡
  • 导航到有问题的DLL并单击“确定”

现在,您将能够在项目中使用DLL中的类型。

 MyOtherDLLNamespace.TheType local = ... 

你可以为exe执行此操作:

  Process.Start("yourProcess"); 

如果要将dll加载到进程中然后使用它,也可以使用AppDomain对象。

最后你可以使用

  Assembly.Load(...) 

每个都有自己的目的,我建议在msdn上为初学者阅读所有这些内容。

添加DLL作为表单应用程序的引用。 然后,您将能够从应用程序代码访问其中的命名空间和类。

在C#应用程序中,添加对您创建的程序集(DLL)的引用。 您可以通过解决方案资源管理器窗口执行此操作 – 右键单击​​引用,然后说“添加引用…”并选择您的DLL。

此时,您可以在C#表单的顶部添加“ using YourDllNamespace; ”,并根据需要使用DLL中定义的类型。

你可以使用不同的方法,一个是

 Assembly.Load 

另一个是使用DllImport属性:

 [DllImport("mylib.dll)] 

您可以将该dll的add reference到项目中。

要添加参考,请使用以下步骤:

1. 转到项目菜单解决方案资源管理器
2.添加参考
3.浏览你的dll
好的