2009-10-02 4 views
0

Я хочу использовать команду Run("someProgram.exe") с использованием языка BASIC. Это откроет 3-ю прикладную программу.Как запустить программу .dll?

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

благодарит заранее.

+0

Вы не запустили DLL, это просто библиотеки, которые могут быть связаны динамически и вызваны с вашего кода –

+0

lol @ question. –

ответ

4

Если вы хотите, чтобы выполнить функцию 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 для произвольных функций Windows, поэтому обычно сложно найти правильный.

+1

Rundll.exe используется для вызова экспортируемых функций из dll (сопоставление определенной подписи) - на самом деле вопрос не в том, что после –

+1

1800: На самом деле, я думаю, вы ошибаетесь. Он просит выполнить DLL как приложение, это то, что позволяет Rundll. Очевидно, он также может просто называть его языком, загружая его, но это не то, о чем он просит. –

+1

это еще не общий метод вызова экспортируемых функций из dll. Только если ваша экспортированная функция соответствует сигнатуре: void CALLBACK EntryPointW (HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow); Будет ли это работать –

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^