передача параметров в С-шную dll
От: Ген Геныч  
Дата: 06.08.03 06:51
Оценка:
Есть dll-ка у которой один параметр — он входной-выходной. Т.е. я передаю ей строку предположим
qwerty а она(dll) добавляет к ней hello. Так вот подскажите пожалуйста как я могу получить обратно в бейсик строку qwertyhello? Dll я делаю, так что если подскажите технологию в целом, то я пойму. Спасибо!
Re: передача параметров в С-шную dll
От: free stranger Россия  
Дата: 06.08.03 08:08
Оценка:
Здравствуйте, Ген Геныч, Вы писали:

ГГ>Есть dll-ка у которой один параметр — он входной-выходной. Т.е. я передаю ей строку предположим

ГГ>qwerty а она(dll) добавляет к ней hello. Так вот подскажите пожалуйста как я могу получить обратно в бейсик строку qwertyhello? Dll я делаю, так что если подскажите технологию в целом, то я пойму. Спасибо!



Declare Function fName Lib "MyLib" (ByRef myString) as someType


В общем передаешь по ссылке а не по значению
The darkness around me
Shores of solar sea
Oh how i wish to go down with the sun....
Re: передача параметров в С-шную dll
От: GarryIV  
Дата: 06.08.03 08:41
Оценка:
Здравствуйте, Ген! Вы писали:

ГГ> Есть dll-ка у которой один параметр — он входной-выходной. Т.е. я

ГГ> передаю ей строку предположим qwerty а она(dll) добавляет к ней hello.
ГГ> Так вот подскажите пожалуйста как я могу получить обратно в бейсик
ГГ> строку qwertyhello? Dll я делаю, так что если подскажите технологию в
ГГ> целом, то я пойму. Спасибо!

Пишем в VB
Private Declare Sub AddHello Lib "mylib.dll" (ByVal lpString As String)
...
Private Sub Button1_Click
    Dim buff As String * 255  ' выделяем достаточный буфер
    buff = "привет" & Chr(0)  ' завершаем строку нулем (в С нужна null-terminated string)
    AddHello buff  
    MsgBox buff
End Sub


Пишем в VC++
void __stdcall AddHello (LPSTR text)
{
    strcat(text," мир");
}


И не забываем экспортировать ф-ю (см. DEF файлы)

Можно и без ноликов обойтись но тогда сишная ф-я должна сама определять реальный размер строки, что в общем случае невозможно. Или ты сам должен в нее этот размер передавать.
Posted via RSDN NNTP Server 1.7 beta
WBR, Igor Evgrafov
Re: передача параметров в С-шную dll
От: grigorash Россия www.geoserver.ru
Дата: 06.08.03 13:10
Оценка:
Здравствуйте, Ген Геныч, Вы писали:

ГГ>Есть dll-ка у которой один параметр — он входной-выходной. Т.е. я передаю ей строку предположим

ГГ>qwerty а она(dll) добавляет к ней hello. Так вот подскажите пожалуйста как я могу получить обратно в бейсик строку qwertyhello? ГГ>Dll я делаю, так что если подскажите технологию в целом, то я пойму. Спасибо!
Пример из MSDN (статья "Using dlls from Visual Basic"):

The following C-language code copies some number of characters from one BSTR into another. Notice that this example tests the second BSTR to see if it is already assigned. If it is, the example uses the SysFreeString function to free the existing string before replacing it.


short __declspec(dllexport) StringArgs(BSTR *pbstrArg1, BSTR *pbstrArg2, int cch)
{ 
// return error code if requested characters 
// less than zero, or input string is unassigned 
// or has too few characters
if (cch < 0 || *pbstrArg1 == NULL || (int)SysStringByteLen(*pbstrArg1) < cch)
    return -1; 

if (*pbstrArg2 != NULL) { // argument string is already assigned; 
                          // we must free before allocating
    SysFreeString(*pbstrArg2);
}

if ((*pbstrArg2 = SysAllocStringByteLen((char *)*pbstrArg1, cch))== NULL)
    return -2;
    return 0;

}


This Visual Basic code declares and calls the StringArgs function:


Declare Function StringArgs Lib "advdll32" (inpStr As String, outStr As String, _
                                            ByVal n As Integer) As Integer

Sub StringArgsTest()
Dim newStr As String
    x = StringArgs("abracadabra", newStr, 5)
    MsgBox x & ":" & newStr
End Sub
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.