Нужно запустить 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.
4 ответа
Почему бы вам просто не создать простое консольное приложение, которое ссылается на DLL как на библиотеку классов?
namespace SMSNotificationDll
{
public class SmsSenderProgram
{
public static void Main(string[] args)
{
// TODO: Argument validation
new smsSender().SendMessage(args[0], args[1]);
}
}
}
Кстати, я бы переименовал 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#, единственной целью которого является вызов этого метода.
Посмотрите на этот вопрос, вы не можете запустить.NET DLL с помощью rundll32