Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 Заголовок сообщения: Ну вот, наковырял, простые варианты работают. А что наковырял - черт его знает...(-) |
|
|
Ну вот, наковырял, простые варианты работают. А что наковырял - черт его знает...(-) |
|
Вернуться к началу |
|
 |
|