Как запустить программу .dll? - PullRequest
0 голосов
/ 02 октября 2009

Я хочу использовать команду Run("someProgram.exe") на языке BASIC. Откроется третья прикладная программа.

Если эта программа работает с использованием .dll (не уверен, если это возможно), а не .exe, как я могу написать это?

спасибо заранее.

Ответы [ 2 ]

4 голосов
/ 02 октября 2009

Если вы хотите выполнить функцию DLL из командной строки, используйте: Rundll.exe

Обратите внимание, что ваша экспортируемая функция должна точно соответствовать сигнатуре (C):

void CALLBACK EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow);

Если этого не произойдет, неизвестно, что произойдет, но вы, вероятно, потерпите крах. Обычной процедурой для вызова произвольных функций из dll в классе VB является использование оператора Declare . Вы должны знать сигнатуру функции, которую вы хотите вызвать во время компиляции.

Например:

Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Function GetUser()
   Dim RetVal As Integer
   Dim UserName As String
   Dim Buffer As String
   Buffer = New String(CChar(" "), 25)
   RetVal = GetUserName(Buffer, 25)
   UserName = Strings.Left(Buffer, InStr(Buffer, Chr(0)) - 1)
   MsgBox(UserName)
End Function

Этот код вызывает функцию "GetUserNameA" из advapi32.dll. Существует много сайтов, посвященных перечислению синтаксиса Declare для произвольных оконных функций, поэтому обычно нетрудно найти правильный.

2 голосов
/ 02 октября 2009

Трудно ответить, не понимая природу вашего .dll. Конечно, нет никакого способа просто вставить ваш dll в какой-нибудь жгут и ожидать, что он просто запустится. Это должно быть для этого. Вы можете создать свой собственный исполняемый файл shell / wrapper, который просто действует как узел процесса с точкой входа, а затем запускает методы на dll.

Я не уверен, подходит ли это вашей модели, но если бы вы были в положении, когда вы можете требовать, чтобы эти dll содержали класс, реализующий интерфейс. Скажем, IRunnable, который содержит один метод Run (). Вы можете создать исполняемый файл, который получает dll в качестве аргумента командной строки, использует отражение, чтобы найти IRunnable, а затем загружает этот класс и вызывает Run ().

...