需要从命令行运行c#dll
本文关键字:运行 c#dll 命令行 | 更新日期: 2023-09-27 17:57:47
我有一个像这样定义的c#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 SMSNotificationDll.dll, SendMessage 0749965244 hello
我丢失了条目:SendMessage。
还有一个技巧可以从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;
}
}
为什么不创建一个简单的控制台应用程序,将DLL引用为类库?
namespace SMSNotificationDll
{
public class SmsSenderProgram
{
public static void Main(string[] args)
{
// TODO: Argument validation
new smsSender().SendMessage(args[0], args[1]);
}
}
}
顺便说一句,我会把smsSender
重命名为类似SmsSender
的东西。
RunDll32仅适用于专门设计为从中调用的DLL。请参阅http://support.microsoft.com/kb/164787了解更多信息。
从命令行运行DLL中代码的最简单方法是制作一个简单的C#命令行应用程序,其唯一目的是调用该方法。
看到这个问题,你不能运行。NET dll使用rundll32