Dll в Dll
От: Zhbanito  
Дата: 25.02.07 15:10
Оценка:
Здравствуйте. Столкнулся с такой проблемой. Есть Dll "A". Если писать приложение с помощью ее функций приложение работает исправно. Но мне нужно часть функций из Dll "A" "завернуть" в свои функции и скомпилировать Dll "B".
Так вот если теперь написать приложение с вызовом этой функции оно пеестает работать корректно.

Напр.

A.dll
Функции:
int summ(a,b)
char* funct(int)

B.dll
char* function(a,b)
{
return funct(summ(a,b));
}

Так вот если в программе сделать с помощью библиотеки A.dll

int main()
{
printf(funct(summ(a,b)));
}
Все прекрасно.

А если с помощью B.dll

int main()
{
printf(function(a,b));
}

Не выходит...
Re: Dll в Dll
От: Zigmar Израиль  
Дата: 25.02.07 16:11
Оценка: :)
Здравствуйте, Zhbanito, Вы писали:

Z>Здравствуйте. Столкнулся с такой проблемой. Есть Dll "A". Если писать приложение с помощью ее функций приложение работает исправно. Но мне нужно часть функций из Dll "A" "завернуть" в свои функции и скомпилировать Dll "B".

Z>Так вот если теперь написать приложение с вызовом этой функции оно пеестает работать корректно.

Z>Напр.


Z>A.dll

Z>Функции:
Z>int summ(a,b)
Z>char* funct(int)

Z>B.dll

Z>char* function(a,b)
Z>{
Z> return funct(summ(a,b));
Z>}

Z>Так вот если в программе сделать с помощью библиотеки A.dll


Z>int main()

Z>{
Z> printf(funct(summ(a,b)));
Z>}
Z>Все прекрасно.

Z>А если с помощью B.dll


Z>int main()

Z>{
Z> printf(function(a,b));
Z>}

Z>Не выходит...

А что не работает и не выходит? Телепатия мне отказала.
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Re: Dll в Dll
От: Tilir Россия http://tilir.livejournal.com
Дата: 26.02.07 12:41
Оценка:
Здравствуйте, Zhbanito, Вы писали:

Z>Здравствуйте. Столкнулся с такой проблемой. Есть Dll "A". Если писать приложение с помощью ее функций приложение работает исправно. Но мне нужно часть функций из Dll "A" "завернуть" в свои функции и скомпилировать Dll "B".

Z>Так вот если теперь написать приложение с вызовом этой функции оно пеестает работать корректно.

Z>Не выходит...


Как начинающий телепат спрошу: с конвенциями вызова всё нормально? Везде __stdcall?

А вообще — код в студию. Из того, что вы уже сказали следует что всё должно работать.
Re[2]: Dll в Dll
От: Zhbanito  
Дата: 26.02.07 13:18
Оценка:
Вот код с использованием исходной библиотеки (приложение сетевое)

int main(int argc, char *argv[])
{
ACE_SOCK_Stream sock;
ACE_SOCK_Connector connector;
ACE_INET_Addr addr;
addr.set(13000,"127.0.0.1");
if(connector.connect(sock, addr)==-1)
return -2;
return 1;
}

Код компилируется и сервер подтвеждает что коннект происходит.

А теперь если создать библиотеку B.dll которая использует исходную и сделать функцию:

extern "C"
{
__declspec( dllexport ) int __stdcall Connect()
{
ACE_SOCK_Stream sock;
ACE_SOCK_Connector connector;
ACE_INET_Addr addr;
if (addr.set(13000,"127.0.0.1")==-1)
return -1;
if(connector.connect(sock, addr)==-1)
return -2;
return 1;
}
}
А в главную программу подключить B.dll и снабдить ее [главную программу] таким вот:

int main(int argc, char *argv[])
{
if (Connect()<0)
printf("F@ck");
for(;);
return 1;
}

То на экране высвечивается F@ck, а сервер не регестрирует попытку подключения...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.