Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Очень простенький вопросик

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Славик
Гость





СообщениеДобавлено: Чт Мар 21 2002 17:27    Заголовок сообщения: Очень простенький вопросик Ответить с цитатой

Я создал DLL в VC++. У меня есть функция которая возвращает строковое выражение. Эту функцию я должен вызывать из VBA for Exel.
Каким образом мне вернуть в VBA строку ? какой тип данных для этого надо использовать в С++?
Как вызывать саму функцию я разобрался, и, например, integer возвращать я научился, а как возвращать string - не знаю.
Помогите умные люди !!!
Заранее благодарю.
Вернуться к началу
nut888
Гость





СообщениеДобавлено: Чт Мар 21 2002 22:11    Заголовок сообщения: Re: Очень простенький вопросик Ответить с цитатой

char *test(char *str)
{
....
return str;
}

main()
{ char str[255], *t;

...
t=test(str);
}

Примерно так
Основная проблема возврата -
Если массив обявить в функции он по выходе
будет уничтожен и возвращенный указатель
будет указывать в никуда

Аналогично сделаны функции в string.h
Вернуться к началу
Славик
Гость





СообщениеДобавлено: Пт Мар 22 2002 10:13    Заголовок сообщения: Re: Очень простенький вопросик Ответить с цитатой

Извините, но я не разобрался.
Попробовал ваше решение, но ничего не работает, наверное я не так понял что-то.
Вот пример моей очень простой DLL:
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}

EXPORT char * CALLBACK MyFunction(int n)
{
return "Test";
}
А вот как я вызываю MyFunction из VBA:
Private Declare Function My Lib "c:\Convert.dll" Alias "#1" (ByVal number As Integer) As Integer
Private Sub CommandButton1_Click()
Dim i As Integer
Dim s As String
s = My(i)
End Sub
(входной параметр как видно не важен)
Должна возвращатся срока "Test".
В s возвращается какое-то отрицательное число, возможно это адрес строки, но как из него выудить саму строку?
Не могли бы вы переписать MyFunction так что-бы она работала?
Или может есть другой вариант?
Заранее благодарю.
Святослав.
Вернуться к началу
nut888
Гость





СообщениеДобавлено: Пт Мар 22 2002 14:12    Заголовок сообщения: Re: Очень простенький вопросик Ответить с цитатой

Трудно что-то сказать по поводу взаимодействия
с VB
Нужно в первую очередь понять
что понимается под типом строка в VB
и тогда писать на c
VB я не знаю и тут Тебе ничем помочь нем могу
Я писал пример предполагая что
передается указатель на char
Но это может быть и другой тип или класс

Попробуй вот так
-------------------------
static char str[255];

EXPORT char *CALLBACK char *MyFunction(int n)
{
sprintf(str, "%d\n", n);
return str;
}

-------------------------
Можно попробовать использовать динамику
но здесь встанет проблема сборки мусора

#include
EXPORT char *CALLBACK char *MyFunction(int n)
{ char *p, str[]="test";
p=malloc(sizeof(test));
strcpy(p, str);
return p;
}
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...