2011-07-26 2 views
1

auto_open VBA 매크로에서 .net DLL ("MyDLL")을 호출하는 Excel 파일이 있습니다. 그 아래 2 라인에 도달 할 때 는 오류가 아래의 발생 :DLL을 호출 할 때 Excel VBA 오류 "잘못된 형식의 프로그램을로드하려고했습니다."

--VBA Code-- 오류가 발생했습니다

--Error--

If objSensitivity Is Nothing Then 

Set objSensitivity = CreateObject("MyDLL.Calculations") '<<Crashes here 
를 : -2147024885 자동화 오류 잘못된 형식의 프로그램을로드하려고했습니다.

내 시스템입니다 :

  • 윈도우 7 64 비트 PC.
  • 그것은 엑셀 2003, 2007 년과 2010 년 설치 (86)이 닷넷 프레임 워크를 가지고
  • 을 가지고 1.1, 2.0, 3.0, 3.5 및 x86 및 x64
  • 그것은이 모든 최신 윈도우 업데이트를 모두 설치 4.0.

기타 참고 사항 : 난의 대상 CPU 설정을 변경하면

  • 나는 DLL이 'anycpu를'의 대상 CPU 설정으로 VB에서 VS2005에서 만든 것을 알고는
  • 그것은 차이가 없습니다 'X86'- 오류가 계속 발생합니다.
  • 최근에 하드 드라이브 오류로 인해 PC를 재구성해야했지만 그 전에는 정상적으로 작동했습니다. 그래서 나는 그것이 지금 일하지 않기 위해 어떻게되었는지에 관해 모른다. 내가 그것을 다시 내 이전 괜찮 았는데 것을 알고 있기 때문에
  • 문제는

. 엑셀의 모든 versons에 내가에서 파일을 열어 발생하고 나는 윈도우 7 64 비트에 그것을 실행하는 다른 사용자를 위해 작동합니다 알고 , 나는 그것이 단지 내 컴퓨터에 특정한 것이고 실제 DLL이 아닌 것으로 가정 할 수있다.

아무도 도와 줄 수 있습니까?

답변

3

나는 이것을 분류했다.

Microsoft Interop DLL에 결함이 있거나 알 수없는 이유로 Interop의 64 비트 버전을 사용 중이므로 모든 Office 버전의 복구 설치를 수행했습니다.

매우 이상하지만, 지금은 실행 중입니다.

0

VBA CreateObject() 호출은 COM 개체를 인스턴스화하는 데 사용됩니다. 문제의 DLL이 적절한 레지스트리 항목을 만들기 위해 제대로 등록 되었습니까?

+0

예, regasm.exe를 사용하여 DLL을 올바르게 등록했습니다. 'RegAsm.exe/unregister MyDLL.dll/nologo/silent RegAsm.exe /tlb:MyDLL.tlb/codebase MyDLL.dll/nologo' –

0

64 비트 프로세스는 32 비트 코드를로드 할 수없고 그 반대의 경우도로드 할 수 없습니다. 시도해 보셨습니까 엑셀 x64?

+0

내가 처음 게시물에 언급했듯이, PC를 다시 포맷해야만 64 비트 OS를 사용하는 다른 사용자에게 잘 돌아갔다. –

+0

나는 OS에 대해 이야기하지 않고 32 비트 Excel에 액세스하려고 시도하는 64 비트 응용 프로그램에 대해 말하고 있습니다. –

+0

죄송합니다. 질문을 잘못 읽었습니다. 나는 당신의 DLL이 엑셀에 접근했다고 생각했지만, 그것은 다른 방향이다. 나는 x86이 차이를 만들었을 것이므로 DLL 컴파일을 기대했을 것입니다. –

0

컴퓨터와 작동하는 PATH 환경 변수를 비교해보십시오.

옛날 방식이지만 종속 DLL 파일을 찾는 검색 프로세스는 여전히 PATH를 사용하여 파일을 찾습니다.

MyDLL의 종속성 중 하나가 시스템의 다른 위치 (동일한 디렉토리 또는 중첩 된 디렉토리가 아닌)에 있으면 누락 된 PATH 디렉토리가 로더를 무력화시킬 수 있습니다.

관련 문제