2013-08-20 3 views
0

오케이 그래서 Excel 스프레드 시트에서 Excel 파일과 함께 사용중인 DLL 패키지를 만들려고합니다. 내 스프레드 시트는 다른 PC에 복사되어 다른 장소에서 사용되며 워크 시트 (DLL 포함)를 새 PC에 복사 할 때마다 사용자가 regasm을 실행하는 것을 피하려고합니다. 나는 시작할 때 regasm을 사용하여 DLL을 등록하기 위해 쉘 명령어를 사용했다. 여기 내 코드입니다 : 참고로셸 명령으로 VBA에서 regasm을 사용하여 DLL 등록

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Dim strWinCmd As String 
    Dim retVal As Double 
    strWinCmd = "cmd.exe %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /u /codebase /tlb """ & Application.ActiveWorkbook.Path & "\JART\JART.dll""" 
    retVal = Shell(strWinCmd, vbHide) 
End Sub 

Private Sub Workbook_Open() 
    Dim strWinCmd As String 
    Dim retVal As Double 
    strWinCmd = "cmd.exe /c %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\regasm.exe /codebase /tlb """ & Application.ActiveWorkbook.Path & "\JART\JART.dll""" 
    Call Shell(strWinCmd, vbNormalFocus) 

    Call Button_Handlers.Sleep(1500) 

    Call Button_Handlers.Initialize 
End Sub 

Button_Handlers.Sleep 단지 시스템 수면 메소드를 호출하고 Button_Handlers.Initialize이 수행 : 내가 시작시 DLL을 등록하려고 해요 그래서 기본적으로

Sub Initialize() 
    'This JART.MainJobControl is the main class in the JART DLL 
    Set JART_Instance = New JART.MainJobControl 
    'Use JART_Instance 
End Sub 

을 - 닫을 때 등록을 취소하십시오. 내 문제는 새로운 PC에서 스프레드 시트를 열면 Button_Handlers.Initialize에 오류가 발생한다는 것입니다. DLL이 참조되지 않은 것처럼 정의되지 않은 클래스 (JART.MainJobControl)를 사용하려고합니다. 파일을 다시 열려고하면 모든 것이 잘 작동합니까 ???

내가이 일을하는 방식은 이미 regasm으로 등록 된 컴퓨터에 DLL에 대한 참조를 수동으로 추가하는 것입니다. 이 Excel 파일을 저장하고 DLL이 등록되지 않은 컴퓨터로 전송 한 다음 열어서 실행 해 봅니다. 나는 참조가 엑셀 파일에 이미 추가 되었기 때문에, 코드는 레거시로 등록해야한다고 생각한다. 아무도 왜 이것이 작동하지 않을지 알고 있습니까? 나는 충분히 오래 자지 못하고있다.

+1

이것은 작동하지 않습니다. Regasm.exe는 HKLM 레지스트리 키를 쓸 수 있도록 상승 실행해야합니다. 한 번만 실행하면됩니다. –

+1

dll이 다른 프로그램에서 사용되는 경우 어떻게됩니까? : p 스프레드 시트를 설치 프로그램에 패키지로 묶는 것이 어떨까요? –

+0

이 DLL은 다른 프로그램에서 사용하지 않습니다. 이 경우 Excel 파일 옆에 DLL을 패키징하고 있습니다. 실제로 어떻게 든이 일을하게되었지만, 나를 위해 일하도록 특별히해야만했던 일을 잊어 버렸습니다. – Ian

답변

0

글쎄, 난 그냥 질문에 언급 된 버릇을 해결하기 위해 끝났다. 초기화 메소드를 다른 메소드로 옮겨서 regasm과 같은 액션 내에서 호출되지 않도록해야했습니다. 이것은 잘 작동하는 것 같습니다. 아직 아무런 문제가 없었습니다.

관련 문제