Только учти что в бинарниках C++ имена функций отличаются от того как ты их объявлял. Проще всего это можно обойти имея функцию на Си которая регистрирует загружаемый модуль в твоей программе нужным образом.
2anonymous (*) (2002-04-10 14:26:00.0):
> имея функцию на Си которая регистрирует загружаемый модуль в твоей программе нужным
> образом.
Отсюда можно подробнее? AFAIK из Сшной проги нелзя вызвать С++ную,
и динамическая линковка С++ных либ возможно ТОЛЬКО с C++ми прогами, откомпиленными тем
же компилером.
Ты меня не так понял. Поясню на примере:
extern "C" {
int test(int aaa);
}
int test(int aaa)
{
return aaa / 5;
}
int main(int argc, char *argv[])
{
return test(10);
}
Если посмотреть символы в бинарнике (командо nm, например), то функция "test" будет называться как ей полагается - "test". Убери объявление прототипа через extern "C" и функция "test" превратится в "test__Fi".
что значит - нельзя. Собственными руками делал. Надо просто любым текстовым редактором подправить обьектный файл и все. :) например функцию int f(int x) C++ назовет в обьектнике f__Fi . C назовет ее просто f. Делаем так. В сишном модуле обьявляем fHLAM, потом компиляем и заменяем в обьектнике HLAM на __Fi. После этого все собирается на ура. Тут конечно можно и сразу назвать ее f__Fi - но так не проканает в фортрановском модуле, так как фортран добавляет в каждому имени _
:) Править объектные файлы руками - это круто. Так или иначе проблема с именами обходится легко, а проблема с разными компиляторами остается. Когда есть необходимость обеспечить работу плагинов собранных разными компиляторами С++ противопоказан.
SadStork (*) (2002-04-11 07:58:52.0):
> любым текстовым редактором подправить обьектный файл
Попробуй, откомпили модуль с функцией int f123456HLAM(int x) с помощью cxx на
True64, а потом поищи в объектнике HLAM.
Кстати, nm покажет 'f123456HLAM(int)'.
Интересно, что с f такой номер проканает, имя короткое, в объектнике
будет нечто типа f__XiprОint