카테고리 없음

"<p>dll 내에서 [function]이(가)라는 진입점을 찾을 수 없습니다 (c++에서 c#으로의 형 변환)</p>"

스택큐힙리스트 2023. 11. 17. 10:38
반응형

    public class cnOCRsdk
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECO_DATA{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=200)]
public string FirstName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 200)]
public string Surname;
}
[DllImport(@cnOCRsdk.dll, EntryPoint=recoCHN_P_Name)]
public static extern bool recoCHN_P_Name(byte[] imgPath, RECO_DATA o_data);
}

함수 호출 코드:


            cnOCRsdk.RECO_DATA recoData = new cnOCRsdk.RECO_DATA();
string path = @C:\WINDOWS\twain_32\twainrgb.bmp;
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] bytes = encoding.GetBytes(path);
bool res = cnOCRsdk.recoCHN_P_Name(bytes, recoData);

받는 오류는 cnOCRsdk.dll DLL에서 'recoCHN_P_Name'이라는 이름의 입구점을 찾을 수 없습니다.
제가 C++에서 C#으로의 유형 변환에 오류가 있는 것으로 의심합니다. 그렇다면 정확히 어디서 오류가 발생하고 있는 걸까요 ...?

답변 1

먼저 함수가 실제로 내보내져 있는지 확인하세요:


Visual Studio 명령 프롬프트에서 dumpbin /exports whatever.dll을 사용하세요

답변 2

Dll 파일에서 찾을 수 없는 [function] 이름에 대한 진입점이 없습니다. (C++에서 C#으로의 형 변환) 이 주제에 대해 SEO 친화적인 한국어 에세이를 작성해 주세요.
제목: C++에서 C#으로 형 변환 시 Dll 파일에서 찾을 수 없는 진입점 오류 해결 방법
서론:
C++과 C#은 각각 독자적인 프로그래밍 언어이지만, 때로는 C++로 작성된 코드를 C#으로 변환할 필요가 있습니다. 형 변환은 이러한 과정 중 중요한 단계 중 하나입니다. 그러나 C++에서 C#으로의 형 변환 시 Dll 파일에서 찾을 수 없는 진입점 오류가 발생할 수 있습니다. 이러한 오류 메시지는 초기 세팅에 문제가 있거나, C++과 C# 간의 호환성 문제로 인해 발생할 수 있습니다. 이 에세이에서는 이 문제를 해결하는 몇 가지 방법에 대해 알아보겠습니다.
본론:
1. API 호출 설정 확인: C++ 코드에서 사용하는 API 함수가 필요한 외부 DLL(동적 연결 라이브러리)을 호출하는지 확인해야 합니다. C#에서는 DllImport 특성과 함께 함수 선언 시 호출할 DLL을 설정하는 데 사용됩니다. DllImport 특성을 사용하여 C++ 코드와 동일한 DLL을 호출하도록 설정해야 합니다.
2. Pinvoke 사용: C#에서 C++ DLL 함수를 호출할 때는 Pinvoke(Platform Invoke) 메커니즘을 사용해야 합니다. 이를 통해 C# 코드에서 C++ DLL 함수로 직접적으로 접근할 수 있습니다. Pinvoke를 사용하기 위해서는 함수의 시그니처와 반환 값의 형식 등을 정확히 맞춰주어야 합니다.
3. CallingConvention 일치: C++과 C#은 호출 규약이 다를 수 있습니다. C++에서는 일반적으로 WINAPI 호출 규약을 사용하지만, C#에서는 Cdecl 호출 규약이 기본값입니다. 호출 규약을 명시하기 위해 CallingConvention 특성을 사용하여 C++ DLL과 C# 코드가 일치하도록 설정해야 합니다.
4. 32비트와 64비트 일치: C++ DLL과 C# 코드 간의 플랫폼 일치도 문제의 원인일 수 있습니다. C++ DLL이 32비트 또는 64비트로 컴파일되어 있는지 확인해야 합니다. C# 코드는 해당 플랫폼과 일치하는 DLL을 호출해야 합니다.
5. 오류 메시지 분석 및 디버깅: Dll 파일에서 찾을 수 없는 진입점 오류가 발생하면 오류 메시지를 세심히 분석하고, 문제의 원인을 파악하기 위해 디버깅 도구를 활용해야 합니다. 오류 메시지로부터 얻은 정보를 통해 추가적인 조치를 취할 수 있습니다.
결론:
C++에서 C#으로의 형 변환 시 Dll 파일에서 찾을 수 없는 진입점 오류는 초기 세팅과 호환성 문제로 인해 발생할 수 있습니다. 이를 해결하기 위해 API 호출 설정을 확인하고, Pinvoke를 사용하며, CallingConvention을 일치시키고, 플랫폼을 일치시키도록 노력해야 합니다. 또한, 오류 메시지를 분석하고 디버깅 도구를 활용하여 문제를 해결하는 데 도움이 됩니다. 이러한 과정을 통해 C++에서 C#으로의 형 변환을 성공적으로 수행할 수 있습니다.

반응형