2009-06-26 4 views
3

VC++ 예제를 제공하는 라이브러리를 테스트하려고합니다. 그러나 gcc/g ++를 모든 프로젝트에 사용합니다.GCC/G ++ 용 VC++ #import 지시문

음, VC++ 예제는 라이브러리가 라이브러리 DLL의 위치를 ​​전달 # import를 지시문을 사용하는 것입니다 액세스하는 방법은 다음 네임 스페이스 에게 라이브러리 내의를 사용하여 수행 한 다음 그것을 만들 수 있어요 몇 가지 정의되지 않은 유형 (나는 그것이 DLL에 정의되어 있다고 가정하고) __uuidof로 새로운 인스턴스를 생성합니다. 그때부터 라이브러리 함수 중 하나를 호출하면 예제는 createdObj-> foo()이고 그 것입니다.

음 ... g ++의 #import는 VC++의 가져 오기 (here 참조)와 다르므로이 예제는 나에게 적합하지 않습니다.

g ++에서 컴파일하기 위해 변환 할 수있는 방법이 있습니까? 아니면 개발자가 정적 라이브러리를 제공 할 때까지 사용할 수 있습니까?

답변

2

cygwin을 사용하는 경우이 페이지는 http://www.cygwin.com/cygwin-ug-net/dll.html이며 필요한 모든 도움을 제공합니다.

mingw를 사용하는 경우 동일한 작업을 수행 할 수 있지만 grep 및 sed가 없을 수 있으므로 .def 파일을 얻으려면 필터링을 수행하는 다른 방법을 사용해야합니다.

+0

감사합니다. 불행히도, 그 웹 사이트에주는 명령은 나를 위해 "기호 없음"을 반환하므로 작동하지 않습니다. VC++에서 어떻게 심볼을 추출 할 수 있는지 궁금합니다. 아마도 라이브러리 함수가 cdecl 함수가 아닌 stdcall 함수이기 때문일까? – beepboopbopbop

+0

링크의 +1 thx ... –

1

VC++에서 #import을 사용했다면 DLL이 일반 DLL이 아니라는 것을 의미합니다. 이는 COM DLL입니다.

gcc에는 COM 지원이 없기 때문에 라이브러리 작성자가 비 COM 버전을 작성하기 만하면됩니다.

+0

COM은 잘 문서화되어 있습니다. C 컴파일러 이상을 사용하여 상호 운용성을 얻을 수 있습니다. – jalf

+1

그래, 불가능하다고 말하지는 않겠지 만 VC++ vtable 레이아웃과 일치하도록 손으로 인터페이스를 만들어야합니다. 비 COM 라이브러리를 찾거나이 프로젝트의 VC++ Express로 전환하는 것이 훨씬 낫습니다. –

2

어쩌면 OLEViewer와 "유형 정보보기"를 사용하여 IDL의 기초를 추출하는 데 도움이 될 수 있습니다. 또는 VC++ 생성 .tlh 및 .tli 파일을 사용하여 G ++ 프로젝트로 가져올 수 있습니다.

나는이 답변이 너무 늦었다 고 생각하지만, 지금 당장은 비슷한 문제가 발생하여 방금이 글을 읽었습니다. 당신이 시간에 해결책을 찾길 바래.

감사합니다.