2012-07-06 5 views
3

다른 라이브러리 또는 응용 프로그램에 정적으로 링크 될 라이브러리를 작성하고 있습니다. 내 도서관을 가능한 작게하고 싶습니다. 내 라이브러리는 파일을 읽어야합니다. 파일 이름은 사전에 알려지고 ASCII 문자 만 포함됩니다. 내 라이브러리에는 사용자 인터페이스 나 GUI 코드가 전혀 없습니다. 그것은 단지 호출 될 함수입니다.Windows에서 파일을 여는 가장 기본적인 방법

가능한 한 적은 코드를 추가하는 링커와 함께 파일을 열려면 어떤 함수를 호출해야합니까?

아마도 CreateFile()은 공유 라이브러리에있는 기본 제공 Windows 기능입니다. 그래서, 난 그냥 CreateFileA() (와이드 문자로 변환을 피하기 위해) 사용해야합니까?

CreateFileA()의 경우 Windows.h을 포함해야합니다. 내 도서관의 크기가 커질까요? 그렇다면 WINDOWS_LEAN_AND_MEAN을 정의합니까?

그냥 _open()을 사용해야합니까? 아니면 _sopen_s()이되어야할까요?

+0

'A '로 끝나는 모든 함수가'W'의 래퍼 일 뿐이라는 것을 알고 계셨습니까? –

+0

ANSI C 함수가 왜 작동하지 않는가? :'fopen','fread' 등 – Linuxios

+0

@JesseGood, 나는 당신의 코멘트 뒤에 요점을 이해하지 못한다. 좋아, A로 끝나는 함수는 래퍼입니다. 이것은 내 문제에 영향을 미친다. 어떻게? – steveha

답변

2

_open 파생물은 표준 C 라이브러리를 사용합니다.이 라이브러리는 일반적으로 라이브러리에 크기를 추가합니다. CreateFile은 갈 길입니다. A 또는 W는 유니 코드로 링크해야하는지 여부에 달려 있습니다. 유니 코드는 링크하려는 대상에 따라 다릅니다.

+0

+1. C 라이브러리는 Windows에서 "표준"이 아니므로 정적으로 링크해야합니다. - 큰 바이너리. 걱정 만이 크기라면, A 나 W는 차이를 만들지 않을 것입니다. 모든 함수는 외부 DLL로부터옵니다. – vanza

+0

@vanza - Visual C는 마법적이고 자동적 인 작업을 많이합니다 ... Visual C가 표준 C 라이브러리에서 과장되었는지 여부를 어떻게 알 수 있습니까? 예를 들어'#include '이'size_t'와 같은 타입을 얻는다면 라이브러리에서 Visual C slurp를 만들거나 링커가 라이브러리에서 링크 할 수 있도록 실제로 라이브러리 함수를 참조해야합니까? Visual C는 링커의 실제 결과를 보여주지 못합니다.'Foo.vcxproj -> C : \ Users \ steveha \ Project \ Debug \ foo.lib' – steveha

+1

@steveha : 라이브러리에서 심볼을 참조하여 라이브러리를 링크해야합니다. 타입 정의는 라이브러리가 아닌 헤더 파일에 있습니다. 정적 라이브러리를 생성하기 때문에 링커가 msvcrt를 즉시 연결해야한다고 생각하지 않습니다. 응용 프로그램이 라이브러리를 정적으로 링크하고 자체 DLL 또는 EXE를 만들 때. – vanza

관련 문제