2009-10-02 7 views
0

BASIC 언어를 사용하여 Run("someProgram.exe") 명령을 사용하고 싶습니다. 그러면 세 번째 응용 프로그램이 열립니다..dll 프로그램을 실행하는 방법은 무엇입니까?

.dll을 사용하여 실행중인 프로그램 (가능하면 확실하지 않음)이 .exe가 아닌 경우 어떻게 코딩 할 수 있습니까?

미리 감사드립니다.

+0

DLL을 "실행"하지 않습니다. DLL은 동적으로 링크 될 수 있으며 코드 –

+0

에서 질문을받습니다. –

답변

4

명령 줄에서 DLL 함수를 실행하기 위해 사용하려는 경우 : 만약 그렇다면

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

: 내 보낸 함수가 정확히 (C) 서명과 일치해야합니다 Rundll.exe

주 아니, 그것은 무슨 일이 일어날 지에 관해서는 정의되어 있지 않지만 아마도 당신은 충돌 할 것입니다. VB 클래스의 dll에서 임의의 함수를 호출하는 일반적인 루틴은 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 

이 코드는 advapi32.dll의에서 "GetUserNameA"함수를 호출합니다. 임의의 창 함수에 대해 Declare 구문을 나열하는 사이트가 많기 때문에 올바른 창 찾기가 일반적으로 어렵지 않습니다.

+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이어야 할 것입니다. 진입 점이있는 프로세스 호스트로 작동 한 다음 dll에 대한 메소드를 시작하는 자체 쉘/래퍼 exe를 작성할 수 있습니다.

이 모델이 사용자의 모델에 맞는지는 모르겠지만 이러한 dll을 요구할 수있는 위치에 있다면 인터페이스를 구현하는 클래스가 포함되어 있습니다. 단일 Run() 메서드가 포함 된 IRunnable을 말합니다. 명령 줄 인수로 dll을 받고, 리플렉션을 사용하여 IRunnable을 찾은 다음 해당 클래스를로드하고 Run()을 호출하는 exe 파일을 만들 수 있습니다.

관련 문제