Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Славик Гость
|
Добавлено: Чт Мар 21 2002 17:27 Заголовок сообщения: Очень простенький вопросик |
|
|
Я создал DLL в VC++. У меня есть функция которая возвращает строковое выражение. Эту функцию я должен вызывать из VBA for Exel. Каким образом мне вернуть в VBA строку ? какой тип данных для этого надо использовать в С++? Как вызывать саму функцию я разобрался, и, например, integer возвращать я научился, а как возвращать string - не знаю. Помогите умные люди !!! Заранее благодарю. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
nut888 Гость
|
Добавлено: Чт Мар 21 2002 22:11 Заголовок сообщения: Re: Очень простенький вопросик |
|
|
char *test(char *str) { .... return str; }
main() { char str[255], *t; ... t=test(str); }
Примерно так Основная проблема возврата - Если массив обявить в функции он по выходе будет уничтожен и возвращенный указатель будет указывать в никуда
Аналогично сделаны функции в string.h |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Славик Гость
|
Добавлено: Пт Мар 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 так что-бы она работала? Или может есть другой вариант? Заранее благодарю. Святослав. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
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; } |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|