C# 从C中的dll调用程序中的方法#
我想从dll调用程序中的方法。C# 从C中的dll调用程序中的方法#,c#,dll,C#,Dll,我想从dll调用程序中的方法。 现在我可以添加一个参数公共空白栏(动作打印,字符串a)。但是还有其他的称呼吗? dll中的代码: class Foo { public void Bar(string a) { //now I want to call method from program Program.Print(a); // doesn't work } } class Foo { public void Bar(string a)
现在我可以添加一个参数
公共空白栏(动作打印,字符串a)
。但是还有其他的称呼吗?dll中的代码:
class Foo {
public void Bar(string a) {
//now I want to call method from program
Program.Print(a); // doesn't work
}
}
class Foo {
public void Bar(string a) {
Program.Print(a);
}
}
节目:
class Program {
public static void Main(string[] args) {
var dll = Assembly.LoadFile(@"my dll");
foreach(Type type in dll.GetExportedTypes())
{
dynamic c = Activator.CreateInstance(type);
c.Bar(@"Hello");
}
Console.ReadLine();
}
public static void Print(string s) {
Console.WriteLine(s);
}
}
class Program {
public static void Main(string[] args) {
var dll = Assembly.LoadFile(@"my dll");
foreach(Type type in dll.GetExportedTypes())
{
dynamic c = Activator.CreateInstance(type);
c.Bar(@"Hello");
}
Console.ReadLine();
}
public static void Print(string s) {
Console.WriteLine(s);
}
}
from()可能吗?您可以使用回调 您可以在dll中添加一个事件 从程序中指定事件 因此,您可以从dll调用事件 在dll中放入公共类:
public event EventHandler MyCallback;
从程序将其设置为所需的方法:
MyDllClassInstance.MyCallback = TheMethod;
现在,您可以从dll类编写:
if (MyCallback != null) MyCallback(sender, e);
您可以使用任何预定义的事件处理程序或创建自己的事件处理程序
例如,对于dll代码:
public delegate PrintHandler(string s);
public event PrintHandler MyCallback;
public void Bar(string s)
{
if (MyCallback != null) MyCallback(s);
}
因此,在程序中,您可以:
class Program {
public static void Main(string[] args) {
var dll = Assembly.LoadFile(@"my dll");
foreach(Type type in dll.GetExportedTypes())
{
dynamic c = Activator.CreateInstance(type);
c.MyCallback = Print;
c.Bar(@"Hello");
}
Console.ReadLine();
}
public static void Print(string s) {
Console.WriteLine(s);
}
}
您可以使用
操作
而不是定义打印处理程序
委托。您可以对其使用反射
请参见DLL中的,我添加了对程序的引用,该代码现在可以运行了。
dll中的代码:
class Foo {
public void Bar(string a) {
//now I want to call method from program
Program.Print(a); // doesn't work
}
}
class Foo {
public void Bar(string a) {
Program.Print(a);
}
}
节目:
class Program {
public static void Main(string[] args) {
var dll = Assembly.LoadFile(@"my dll");
foreach(Type type in dll.GetExportedTypes())
{
dynamic c = Activator.CreateInstance(type);
c.Bar(@"Hello");
}
Console.ReadLine();
}
public static void Print(string s) {
Console.WriteLine(s);
}
}
class Program {
public static void Main(string[] args) {
var dll = Assembly.LoadFile(@"my dll");
foreach(Type type in dll.GetExportedTypes())
{
dynamic c = Activator.CreateInstance(type);
c.Bar(@"Hello");
}
Console.ReadLine();
}
public static void Print(string s) {
Console.WriteLine(s);
}
}
你是说
MyProgram
还是Program
?“不行”是什么意思?@JohnWu我的意思是Program
。我的意思是它显示错误名称程序在curcurcurent内容中不存在。使用“不工作”。只有在构建主项目后才能构建DLL。虽然这在技术上是可能的,但这是您强烈希望避免的。使用接口向插件公开主机服务。我同意@HansPassant。如果您正在构建一个可插拔的体系结构,那么您将需要一种有序的方式来向插件公开服务。一个IPluginContext
或什么的,并给它一个Print
方法。