2011-01-11 5 views
0

C# winapp가 있습니다. C#에서 네이티브 .dll 파일 (C++로 만든 파일)을 호출하면 정상적으로 작동합니다.C# .NET에서 Win32 네이티브 DLL 파일을로드 할 수 없습니다.

DLL을로드 할 수 없습니다

"C : \ dllname.dll"지정된 모듈을 내가 다른 컴퓨터에 내 응용 프로그램 파일 (.exe 및 .dll 파일)을 복사 할 때

는, 나는 말한다 오류가 찾을 수 없습니다. (HRESULT에서 예외 : 0x8007007e가) :

class IsoMessageHelper 
{ 
    public const string ISO8583_DLL = "c:\\Hc8583.dll"; 
    [DllImport(ISO8583_DLL, CallingConvention = CallingConvention.Cdecl)] 
    public static extern bool InitializationRq(...) 
} 

어떻게해야합니까 여기

는 C# 코드인가?

+0

''선언을 C# 코드에서 게시하십시오. –

+0

나는 게시물을 편집하고 C# dll 가져 오기 코드도 작성했습니다. – losingsleeep

+0

당신의 코드가 여전히 C : \ 디렉토리에있는 DLL에 대한 경로를 하드 코드한다는 것을 알았습니다. 다른 답변이 제안했듯이, 이렇게 할 이유가 없습니다. 응용 프로그램은 실행 파일과 동일한 디렉토리에있는 DLL을 자동으로로드합니다. 파일 이름 만 있으면됩니다. –

답변

5

네이티브 종속성이있는 .Net 응용 프로그램을 배포 할 때 공통적 인 문제는 네이티브 DLL이 대상 컴퓨터에서 종속성 자체를 찾을 수 없다는 것입니다. 올바른 버전의 C 런타임.

Dependency Walker과 같은 도구를 사용하여 네이티브 dll을 분석하고 복사 한 컴퓨터에 종속 된 종속성이 있는지 확인하십시오.

+0

@ user434186 도움이되는 답변에 대해 투표를하고 질문 및 문제를 해결하는 답변을 수락해야합니다. –

+1

파일을 찾을 수 없습니다.이 답변을 가리 킵니다. @ user434186 @chibacity가 말한대로 대답하고 좋은 답변에 투표하고 이전 질문의 최상의 답변을 수락하십시오. –

+0

그것은 .dll 종속성입니다. 내 dll은 기본적으로 Windows \ system32 폴더에없는 MSVCR100.dll의 일부 기능을 사용합니다. 그쪽으로 dll mising 복사하고, 그것은 잘 작동했습니다. 감사. – losingsleeep

1

파일 이름을 지정하는 DllImport 속성 매개 변수의 경로를 하드 코딩하지 마십시오. 그런 다음 실행 파일 외에 파일이 올바른지 확인해야합니다. 이 같은

뭔가 :

[DllImport("user32.dll", CharSet = CharSet.Unicode)] 
+0

나는 .dll을 C# .exe 파일 바로 옆에 복사했습니다. 심지어 'C : \\'경로에 복사하여 문제를 해결했지만 문제가 존재합니다! – losingsleeep

1

이동 루트에 DLL. 그게 효과가 있다면, 당신의 속성을보고 이유를 알아보십시오. 특정 코드를 게시하지 않았으므로 어떠한 특별한 이유도 제공 할 수 없습니다.

+0

나는 .dll을 C# .exe 파일 바로 옆에 복사했습니다. 심지어 'C : \\'경로에 복사하여 문제를 해결했지만 문제가 존재합니다! – losingsleeep

관련 문제