Вызов функции с параметром AnsiString ( С6 -> BDS2009 )
Уточняю:
Есть Dll-ка собранная на C++ Builder 6 в ней функция типа:
__declspec( dllexport ) void __fastcall ShowMyMessage( AnsiString MyMessage )
{
ShowMessage(MyMessage);
}
При попытке вызвать эту функцию в C++ Builder 2009 выдает:
[ILINK32 Error] Error: Unresolved external '__fastcall ShowMyMessage(System::AnsiStringT<0>)' referenced from C:\WORK\TESTDLL\DEBUG\EXEMAIN.OBJ
Копание в хидерах показало что AnsiString в 2009 определен как:
typedef AnsiStringT<0> AnsiString;
Может у кого есть идеи как прикрутить старые DLL-ки с вызовами AnsiString к С++ Builder 2009?
Вобще-то можно. В статической по крайней мере можно - не скажу что это хорошая идея правда.
Проблема связана с линковкой самой длл. Проверьте параметры и пересоберите.
именно это я и имел ввиду ;)
Т.к. разные менеджеры кучи дадут о себе знать рано или поздно необъяснимыми глюками. Кстати они саааавершенно разные в 6-м и 2009м. (в последнем FastMM который несколько упростил упомянутую мною проблему)
__declspec( dllexport ) void __fastcall ShowMyMessage( LPCTSTR MyMessage )
{
ShowMessage( AnsiString( MyMessage ) );
}
Проблема не в линковке, а в определении AnsiString. В 6-ке AnsiString - это и есть AnsiString, а в 2009-ом AnsiString это AnsiStringT<0>, то есть уникодовый. Описание же старого AnsiString-а отсутствует вообще. :mad:
Неплохая мысль если есть такая возможность
Блин.. ну вы хоть видите какую он вам ошибку выдает? Ошибка линкера - проблема в линковке. Такое впечатление что не написан _declspec(dllimport)
Видеть, то вижу, но линкер ищет '__fastcall ShowMyMessage(System::AnsiStringT<0>)', а нужно чтобы искал '__fastcall ShowMyMessage(System::AnsiString)'. В чем разница то понятно? Вопрос в том и стоит как заставить C++ Builder 2009 работать со старыми AnsiString-ами...:confused: