使用C#程序启动Dll

时间:2011-02-02 16:41:46

标签: c# dll

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

#include <windows.h>

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#代码做类似的事吗???

9 个答案:

答案 0 :(得分:3)

要执行代码示例的操作,请使用以下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#函数?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使您的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);
            }

答案 3 :(得分:1)

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

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

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

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

MyOtherDLLNamespace.TheType local = ...

答案 4 :(得分:0)

你可以为exe执行此操作:

   Process.Start("yourProcess");

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

最后你可以使用

  Assembly.Load(...) 

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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

Assembly.Load 

另一个是使用DllImport属性:

[DllImport("mylib.dll)]

答案 8 :(得分:0)

您可以add reference将该dll导入您的项目。

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

  

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