2011-02-02 2 views
0

2010 년 나는 & 압축 해제 파일을 압축 ZLIB를 사용하는 간단한 데모 프로그램을 만들려고하지만 파일을 연결할 때, 비주얼 스튜디오 2010 링커는 나에게이 오류 준 :사용 ZLIB는

Error 2 error LNK1313: ijw/native module detected; cannot link with pure modules

내가/clr : just/clr로 변경하려고 시도했을 때. 프로그램이 컴파일되고 실행되지만 런타임 오류가 발생했습니다 : "응용 프로그램을 올바르게 시작할 수 없습니다 (0xc000007b). 응용 프로그램을 닫으려면 확인을 클릭하십시오." 이것은 지금까지 단지 풍선 팁에서 ZLIB 버전을 받고 내 코드입니다

:

String^ info = gcnew String(reinterpret_cast<const char*>(zlibVersion())); 
notify->ShowBalloonTip(20000, "Zlib Version", info, ToolTipIcon::Info); 

당신은 나를 ZLIB에 무슨 일이 있었는지 알아내는 데 도움이 수 및 해당 오류는 무엇인가. 감사합니다

답변

1

CLR을 타겟팅하는 경우 네이티브 라이브러리에 구심점을두기보다는과 같은 네이티브 (CLR 용) Zipping/Zlib 라이브러리 (예 : DotNetZip)를 사용하는 것이 좋습니다.

은 내가 C++/CLI 전문가가 아니에요, 그래서 이것은 완전히 잘못 될 수도 있지만 나는 정의되지 않은 동작에

String^ info = gcnew String(reinterpret_cast<const char*>(zlibVersion()));

결과를 믿는다. 그 이유는 System::String 생성자가 System::Char 객체의 배열을 기대하며 C++의 char 데이터 유형을 기대하지 않기 때문입니다. System::Char은 2 바이트 너비이고 char은 1 바이트 너비입니다 (System::String은 유니 코드를 지원하고 zlib는 지원하지 않습니다). (어떤 경우에는, reinterpret_cast이 주요 붉은 깃발이다? - 왜 여기에 캐스트를 사용하는)

또한

, 오류 0x7B가

The filename, directory name, or volume label syntax is incorrect.

입니다 (그것이 NTSTATUS 코드이기 때문에에서 0xc 아마이) Zlib의 동적 링크 된 버전을 사용하고 있다면 DLL이 프로그램을 위해 어딘가에 열려 있는지 확인하십시오.

+0

고맙습니다. – r1cebank

+0

'System :: String'은'const wchar_t *'('System :: Char'와 동등 함)와'const char *'(유니 코드로 변환) 모두를 받아들이는 생성자를 가지고 있습니다. 'reinterpret_cast'는 확실히 틀린 일입니다. –