需要从命令行运行ac#dll

我的ac #dll定义如下:

namespace SMSNotificationDll { public class smsSender { public void SendMessage(String number, String message) { ProcessStartInfo info = new ProcessStartInfo(); info.FileName = "c:\\Program Files\\Java\\jdk1.6.0_24\\bin\\java"; info.WorkingDirectory = "c:\\"; info.Arguments = "-jar SendSms.jar "+number + " "+message; info.UseShellExecute = false; Process.Start(info); } } } 

我需要从命令行执行它。

有什么方法可以通过rundll32运行它吗?

当我用它运行它:

 rundll32 SMSNotificationDll.dll, SendMessage 0749965244 hello 

我错过了条目:SendMessage。

为什么不创建一个简单的控制台应用程序,将DLL称为类库?

 namespace SMSNotificationDll { public class SmsSenderProgram { public static void Main(string[] args) { // TODO: Argument validation new smsSender().SendMessage(args[0], args[1]); } } } 

顺便说一下,我将smsSender重命名为smsSender类的SmsSender

有一个技巧可以从c#创建非托管导出 – https://www.nuget.org/packages/UnmanagedExports

它是如何工作的? 创建一个新的类库或继续使用现有的类库。 然后添加UnmanagedExports Nuget包。 这几乎是所有需要的设置。 现在你可以编写任何类型的静态方法,用[DllExport]装饰它并从本机代码中使用它。 它的工作方式与DllImport类似,因此您可以使用MarshalAsAttribute自定义参数/结果的编组。 在编译期间,任务将修改IL以添加所需的导出。

 class Test { [DllExport("add", CallingConvention = CallingConvention.Cdecl)] public static int TestExport(int left, int right) { return left + right; } } 

RunDll32仅适用于专门设计用于从中调用的DLL。 有关更多信息,请参见http://support.microsoft.com/kb/164787 。

从命令行运行该DLL中代码的最简单方法是创建一个简单的C#命令行应用程序,其唯一目的是调用该方法。

看到这个问题,你不能使用rundll32运行.NET DLL