Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача строковых параметров / 3 сообщений из 3, страница 1 из 1
21.11.2008, 10:50
    #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
21.11.2008, 11:03
    #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
21.11.2008, 14:17
    #35668170
NessO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача строковых параметров
Спасибо! Просто я вредных советов начиталась, поэтому и запуталась...
Функция работает, значит где-то в другом месте глючит. Буду разбираться...
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача строковых параметров / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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