컴파일 및 링크 이슈
권장되는 개발 방법은 당신 스스로 프로젝트를 만들지 않고 대신 주어진 예제 프로젝트를 이용하는 것입니다.
비록 이러한 프로젝트들이 API 개발에 맞게 구성되어 있지만,
우리는 특히 중요한 문제들에 주의를 환기시키고 싶습니다.
새로운 MacTel 플랫폼 때문에, 우리는 Xcode에서 새로운 프로젝트를 생성하는 단계별 가이드를 제공합니다.
컴파일러 지시어: macintosh
또는 WINDOWS
, ACExtension
대부분의 include 파일들은 위의 지시어들이 정의되어 있어야 합니다.
플랫폼 설정 Mactel Project Info (section: GCC 4.0 - Preprocessing)의 Preprocessor Macros를 다음과 같이 설정합니다.
macintosh=1 ACExtensionWindows ACExtension
과WINDOWS
는 보통ACAPinc.h
header를 include하기 전에 source/header 파일들에 define됩니다.
Enums Always Int: ON
APIdefs_xxx.h 내 structure들은 enum 변수들을 참고합니다. 그러므로 그 크기는 엄격하게 define 되어야 합니다. (Xcode에서 이것은 기본 값입니다.)
Struct Alignment: 8 byte
이것은 호환성 때문에 필수입니다.
ArchiCAD 9부터 API structure들 내부에서 빌트-인
bool
type은GS::Bool8
으로 대체되었음을 참고하십시오. 그 이유는 MacTel 플랫폼 환경에서 새로운 GCC 컴파일러로의 마이그레이션에서bool
이 1바이트가 아닌 4바이트 크기의 type으로 구현되었기 때문입니다. structure가 정렬되도록 유지하려면, 새로운 type이 GSRoot 모듈 내에 도입되어야 합니다. 이렇게 하면 MacTel와 Windows 양 플랫폼에서 1바이트로 컴파일됩니다. (GS::Bool8
은 8-비트 boolean type을 의미합니다)
Calling convention: __cdecl
ArchiCAD와 애드온 간의 통신은 __cdecl
type 파라미터 전달을 해야 합니다.
Visual C++에서 당신은 Solution 프로퍼티의 C/C++/Advanced 페이지의 Calling Convention line에서 이 컴파일러 flag를 설정해야 합니다.
Macintosh에서는 단지 표준 calling convention style이 사용됩니다.
File name extension, creator and type
Windows에서 당신은 표준 .dll 파일 확장자를 .apx로 변경해야 합니다. (Solution 프로퍼티의 Linker/General/Output File 탭에서 변경할 수 있습니다)
Xcode에서 다음 키-값 쌍을 Info.plist 파일에 추가하십시오:
<key>CFBundlePackageType</key> <string>.APX</string> <key>CFBundleSignature</key> <string>GSAP</string>
Export lists
ArchiCAD와 애드온들 간의 연결을 구축하기 위해 당신은 DLL / code fragment로부터 내보내기 기능을 만들어야 합니다. 이러한 기능들은 플랫폼 의존적이며 동봉된 라이브러리들 안에 코드화 되어 있습니다. 당신이 해야 할 것은 단지 그것들을 내보내는 것입니다.양쪽 플랫폼에서
GetExportedFuncAddrs
와SetImportedFuncAddrs
함수들은 반드시 내보내져야 합니다. Windows에서 Solution 프로퍼티의 Linker/Command Line 페이지에서 다음 Additional Options를 설정하십시오:/export:GetExportedFuncAddrs,@1 /export:SetImportedFuncAddrs,@2또는 project_name.def 파일을 사용합니다:Example.def
GetExportedFuncAddrs SetImportedFuncAddrs