2009-05-24 2 views
0

Visual C++, .NET 및 Windows 프로그래밍 (Objective-C/Cocoa에서 제공)에 익숙하지 않고 CFLite (열기)를 사용하려고합니다. CoreFoundation Lite) 라이브러리 .lib 파일로 컴파일했습니다. 순수한 관리되지 않는 C로 작성되었으며 관리되는 CLR .NET 응용 프로그램에서 사용하고 싶습니다. __CFStringMakeConstantString에 대한 바로 가기 인 함수 CFSTR을 링크하려고하면 끔찍하게 실패합니다. 어떤 충고? 오류가 첨부되었습니다.non-CLR 코드를 .NET 응용 프로그램에 연결

Proj.obj : error LNK2031: unable to generate p/invoke for "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]); calling convention missing in metadata 
Proj.obj : warning LNK4248: unresolved typeref token (01000016) for '__CFString'; image may not run 
Proj.obj : error LNK2028: unresolved token (0A00000B) "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __clrcall main(cli::array<class System::String^>^)" ([email protected]@[email protected]@@@Z) 
Proj.obj : error LNK2019: unresolved external symbol "extern "C" struct __CFString const * __clrcall __CFStringMakeConstantString(char const *)" ([email protected]@[email protected]@[email protected]) referenced in function "int __clrcall main(cli::array<class System::String^>^)" ([email protected]@[email protected]@@@Z) 

업데이트 : 난 그냥 Win32에서 네이티브 응용 프로그램 (배경 응용 프로그램을 그것의) 내 사용자 인터페이스 어쨌든 최소화 될 것입니다 때문에 호출가는 끝났다. p로 실행/invoke 조금, 그리고 그것은 단지 나 같은 초보자를 위해 복잡하게 보였다 : p 고마워!

답변

1

C 라이브러리의 관리되는 C++ 응용 프로그램과 비교하여 관리되는 C++ 응용 프로그램에서 사용중인 함수 서명이 일치하지 않는 것 같습니다.

관리되는 World와 관리되지 않는 World 간의 통신에 .Net이 사용하는 기술은 PInvoke입니다. PInvoke를 사용하는 방법에 대한 가장 좋은 자료는 pinvoke.net입니다. C 함수 서명은 매우 단순 해 보이기 때문에 C++에서 일치하는 매개 변수를 올바르게 마샬링하여 작성하는 것이 중요합니다.

0

나는 비 관리에서 관리 코드와 함께 작동하도록 아는 방법은 DLL을 구축하거나 COM 함께 작동하는 것입니다.