2013年12月1日 星期日

BCB 編譯的時候出現 Unresolved external ThrowIfOutOfRange Error

最近在編譯一個就的程式的時候出現了一個 Linker Error

Unresolved external '__stdcall System::AnsiString::ThrowIfOutOfRange(int) const'

仔細的去查了程式碼發現問題發生的原因是在程式中使用了
AnsiString  的 operator[]

在網路上找了幾天之後發現這個問題從BCB5就存在
解決的方法是
1. 在option -> Advanced Compiler -> Calling convention 改用  C
或是
2. 直接修改dstring.h
    我的檔案是位在$(BCB)\Include\Vcl\dstring.h (208行)
     將void  ThrowIfOutOfRange(int idx) const;改成
     void __cdecl ThrowIfOutOfRange(int idx) const;