我有一个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#代码做类似的事吗???
答案 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中的类型。
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
好的