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

Вопль отчаяния! C++-шники! Ну помогите же с DLL!

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





СообщениеДобавлено: Ср Апр 23 2003 06:00    Заголовок сообщения: Вопль отчаяния! C++-шники! Ну помогите же с DLL! Ответить с цитатой

Ковырял долго и упорно!
Все найденные примеры работают корректно только до тех пор, пока в вызываемой из dll функции значение строки не изменяется.
Один из последних найденных в MSDN примеров(include и def-файл опускаю, с ними все в порядке):статья 187912
HOWTO: Pass a String Between Visual Basic and Your C DLL
void __stdcall FillString(LPSTR pszString, LONG cSize)
{
// Create a temp buffer with our string
char buffer[] = "Hello from the C DLL!";
// Copy our temp string to pszString
// but check the size to make sure we have a buffer
// big enough to hold the entire string.
if (cSize > strlen(buffer))
strcpy(pszString, buffer);
}
Для VB:
Private Declare Sub FillString Lib "StrSamp.dll" _
(ByVal sMyString As String, ByVal cBufferSize As Long)

Private Sub Command2_Click()
Dim sFillTest As String
sFillTest = Space$(260)
FillString sFillTest, 260
MsgBox Trim$(sFillTest), vbInformation, "Fill String"
End Sub

Вызывает при запуске ошибку Память не может быть "read"
Причем, насколько я могу судить, вставляя в dll для отладки MessageBox, изменение в самой dll происходит нормально, ошибка возникает при чтении Basic'ом измененной строки...
HELP!!!
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Ср Апр 23 2003 12:13    Заголовок сообщения: Re: Вопль отчаяния! C++-шники! Ну помогите же с DLL! Ответить с цитатой

Я. как и в прошлый раз, настаиваю, что вместо

>>Private Declare Sub FillString Lib "StrSamp.dll" _
(ByVal sMyString As String, ByVal cBufferSize As Long)

должно быть

Private Declare Sub FillString Lib "StrSamp.dll" _
(sMyString As String, ByVal cBufferSize As Long)

То есть строка должна передаваться по ссылке
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Ср Апр 23 2003 12:44    Заголовок сообщения: Да никак не работает! Ни byval, ни byref!(+) Ответить с цитатой

Ну попробуй сам!
Если хошь, я тебе готовые проекты вышлю, и С++, и VB.

А byval или byref - насколько я понимаю, зависит от того, как оформлены параметры в функции - как СТРОКА или как УКАЗАТЕЛЬ на оную соотв.Или даже указатель на указатель.
Черт бы побрал эти Си-шные выкрутасы...

В одной из раскопанных мной на MSDN статей приводится пример и с byval-строкой, и с byref. Все четко - только memory could not be read...
Вернуться к началу
Борис
Гость





СообщениеДобавлено: Ср Апр 23 2003 13:09    Заголовок сообщения: Re: Да никак не работает! Ни byval, ни byref! Ответить с цитатой

высылай на tempaddress777@mail.ru
Вернуться к началу
AndyM
Гость





СообщениеДобавлено: Чт Апр 24 2003 06:36    Заголовок сообщения: Ну вот, наковырял, простые варианты работают. А что наковырял - черт его знает...(-) Ответить с цитатой

Ну вот, наковырял, простые варианты работают. А что наковырял - черт его знает...(-)
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: 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
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...