powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача строковых параметров
3 сообщений из 3, страница 1 из 1
Передача строковых параметров
    #35667353
NessO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!
Переписываю прогу с Фортрана на VB. Задекларировала функции Сишной dll. Все работает нормально, кроме единственной функции со строковым параметром.
В Dll функция описана так:
Код: plaintext
1.
2.
3.
4.
5.
6.
Function MdbSetGridCccc(hDb,szCccc)
!dec$attributes stdcall, alias: ’_MdbSetGridCccc@ 8 ’ ::MdbSetGridCccc
!dec$attributes reference :: szCccc
CHARACTER* 5  szCccc
INTEGET* 4  hDB [VALUE]
End
В h-файле:
Код: plaintext
BOOL WINAPI MdbSetGridCccc(Handle h, LPSTR cccc)]

Вызов на Фортране:
Код: plaintext
1.
2.
szCccc=’EGRR’
MdbSetGridCccc(hDB, szCccc)
В VB:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Private Declare Function MdbSetGridCccc Lib “windbr32” _
(ByVal HANDLE as Long, ByVal szCccc as Long) As Boolean
       
Private Function BSTRtoLPSTR(sBSTR As String, b() As Byte, lpsz As Long) As Long
Dim cBytes As Long
Dim sABSTR As String

cBytes = LenB(sBSTR)
ReDim b( 1  To cBytes +  2 ) As Byte
sABSTR = StrConv(sBSTR, vbFromUnicode)
lpsz = StrPtr(sABSTR)

CopyMemory b( 1 ), ByVal lpsz, cBytes +  2 
lpsz = VarPtr(b( 1 ))
BSTRtoLPSTR = cBytes

End Function

…..
Dim bStr as String
Dim cnt as Long

bStr = "E" & vbNullChar & "G" & vbNullChar & "R" & vbNullChar & "R"
cnt = BSTRtoLPSTR(bStr, bArr, lpsz)        

c1= MdbSetGridCccc(hDB, lpsz)
получается c1=False
Читала, что входные параметры нужно 3 раза перекодировать, а выходные – 4. В каком месте? И что с этим делать?
Буду благодарна за помощь.
...
Рейтинг: 0 / 0
Передача строковых параметров
    #35667399
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: NessO
> Всем добрый день!
> Переписываю прогу с Фортрана на VB. Задекларировала функции Сишной dll. Все работает нормально, кроме
> единственной функции со строковым параметром.
> Private Declare Function MdbSetGridCccc Lib “windbr32” _
> (ByVal HANDLE as Long, ByVal szCccc as String ) As Boolean

"Не правильной стороной, ты бутерброд ешь!" (с) Матироскин
Зачем в юникод кодировать? Функция ожидает указатель на строку, и если длл не собрана с поддержкой юникода(в чем я
сильно сомневаюсь) то и строки она будет кушать обычные

> Читала, что входные параметры нужно 3 раза перекодировать, а выходные – 4. В каком месте? И что с этим делать?
"Не читайте на ночь советских газет" (с) проф. Преображенский


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Передача строковых параметров
    #35668170
NessO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Просто я вредных советов начиталась, поэтому и запуталась...
Функция работает, значит где-то в другом месте глючит. Буду разбираться...
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача строковых параметров
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]