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

Помогите с DLL...

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





СообщениеДобавлено: Пт Апр 18 2003 09:28    Заголовок сообщения: Помогите с DLL... Ответить с цитатой

Скачал файлик http://progcpp.narod.ru/zip/propis.arj, Си-шная библиотека, возвращает число прописью.
Пробую подцепить эту библу из Бейсика, возвращает всегда 0...
В исходном тексте в экспортирующей функции убрал все, что возможно, оставил return "aaaa",
выглядит теперь так:
_declspec(dllexport) LPCTSTR CALLBACK Propis(double InDouble)
{
MessageBox(NULL,"ghbbbbb","Function from DLL",MB_OK);
return "aaaaaaaaaaaa";
}
Messagebox работает, но все равно возврат 0.
Плиз, подскажите, чего там не хватает?!
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Пт Апр 18 2003 13:27    Заголовок сообщения: Строки в/из бейсика нужно передавать ByRef-аргументом (+) Ответить с цитатой

Твой

>> return "aaaaaaaaaaaa";

возвращает не "aaaaaaaaaaaa", а адрес начала строки "aaaaaaaaaaaa" в теле функции, преобразованный компилятором к типу _declspec(dllexport) LPCTSTR CALLBACK

Учите матчасть, господа
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Сб Апр 19 2003 08:51    Заголовок сообщения: Ты пальцем покажи :-))... Я на Си не пишу..(+) Ответить с цитатой

Да хоть двадцать раз ByRef!
Мне нужно возвратить строку!
Уверен, что изменения в Си-шном коде самые минимальные нужно сделать!
Чтобы вызов из Бейсик выглядел самым обычным образом:
Private Declare Function Propis Lib "propis.dll" (InDouble As Double)
MyString=Propis(1234)
или так
Private Declare Function Propis Lib "propis.dll" (InDouble As Double,MyString as String)
Call Propis(1234,MyString)
А параметры по умолчанию и так по ссылке...
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Пн Апр 21 2003 13:32    Заголовок сообщения: Re: _Iooo Ответить с цитатой

Твой второй вариант

>>Private Declare Sub Propis Lib "propis.dll" (ByVal InDouble As Double, ByRef MyString as String)
MyString = Space(500)
>>Call Propis(1234,MyString)

верный (с добавлением строчки MyString = Space(500) перед вызовом функции).
Теперь функция на C++:

void Propis(double d, char* s) {
//......................
//.... заполнение s ....
//......................
// строка MyString = Space(500) в коде
// бейсика нужна, чтобы s указывал
// на уже выделенное место для результата,
// то есть чтобы C++-программа не выделяла
// сама память под результат, а только
// производила расчет, иначе может
// возникнуть типичное для виндов
// сообщение о недопустимой операции
//......................
return;
}
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...