마침내 C++ DLL이 완료되었지만 C#에서 호출하는 데 문제가 있습니다. 그것은 확실히 'DLLNotFoundException'다른 예외를 얻을 폴더에서 제거 할 때 DLL을 찾는 것입니다. 전체 오류 설명은 "DLL 'CComms.dll'에서 'GetNewInstance'라는 항목 점을 찾을 수 없습니다." 기능은 모든 너무C#에서 관리되지 않는 함수를 호출 할 때 'System.EntryPointNotFoundException'이 발생했습니다.
__declspec(dllexport) DWORD __stdcall GetNewInstance();
처럼 ++ C에 수출하고 있습니다 내가 'DUMPBIN/수출 CComms.dll'나는 난 어떤 이상한 출력을 얻을 사용할 때 나는 그렇게
[DllImport("CComms.dll")]
private static extern uint GetNewInstance();
// ... and in main
uint inst = GetNewInstance();
같은 C 번호에서 호출 확실하지 않은 함수 이름은 엉망이되고 있으며이 진입 점 내가 대신 __stdcall의 __cdecl 사용하려고했습니다
7 6 00002FB0 [email protected]@YGKXZ = [email protected]@YGKXZ (unsigned long
__stdcall GetNewInstance(void))
를 찾을 수 없습니다 이유, 그리고 같은 결과를 가지고 있는지. 나는이 프로젝트를 끝내기에 너무 가깝다. 나는 그 모든 것을 끝내기를 바란다. 희망적으로 이것이 내 방식의 마지막 것이다.
감사합니다.
해결 나는 너를 본다. ntion "CComms.dll"하지만 DllImport 특성은 "VLTGLSCommsDLL.dll"을 찾는 것 같습니다. 그게 잘못된 것인가? – Ani
"이 함수는 모두 C++에서 내보내집니다."수출 선언에'extern "C"'를 추가하여 일반적인'__stdcall' 내보내기 이름을 얻을 수 있습니까? .NET이 두 가지 유형을 모두 가져올 수 없다면 놀랄 것입니다. – Rup
죄송합니다. 수출 된 모든 함수가 extern "C"블록으로 싸여 있다고 설명 했어야합니다. 여기서는 함수 중 하나를 예제로 보여 주었고, DLL 이름에 대해서는 최근에 변경 한 것뿐입니다. 이것을 입력 할 때 이전과 새로운 DLL이 섞여서 올바른 DLL을 찾고 DLL을 찾았습니다. 그렇지 않으면 DLLNotFoundException이 발생합니다. 모든 곳에서 올바른 DLL 이름을 갖도록 코드를 변경했습니다. –