Re[2]: возвращение строки из dllexport функции
От: romstyop  
Дата: 27.11.03 10:54
Оценка:
Здравствуйте, Leonid V. Volnin, Вы писали:

LVV>Здравствуйте, romstyop, Вы писали:


R>>Привет All!

R>>Такая проблема.
R>>Код в dll VC6:
R>>extern "C" __declspec(dllexport) BOOL ProcessD(LPCSTR FileName, LPSTR &pStrBuffer)
LVV>[skipped]
R>>и есть GUI на VB:
R>>Private Declare Function ProcessD Lib "mydll.dll" (ByVal FileName As String, ByRef strBuffer As String) As Integer

R>>Label1.Caption = CStr(ProcessD("myfile.dat", str))


R>> При debug dll выдается следующее:

R>>HEAP[test.exe]: Heap block at 0014E2F8 modified at 0014E310 past requested size of 10
R>>HEAP[test.exe]: Invalid Address specified to RtlSizeHeap( 00140000, 0014E300 )

R>>Подскажите, как правильно возвратить строку, плиз.


LVV>Попробуй вместо LPSTR использовать тип VARIANT (с типом BSTR). С "вариантом" Бейсик работает нормально.

LVV>З.Ы. Естественно, что буфер под строку надо выделять в ProcessD .

Сделал так:
extern "C" __declspec(dllexport) BOOL CALLBACK ProcessD(LPCSTR FileName, VARIANT FAR*pVar)
{
BOOL bResult = FALSE;
CString sBuffer;
CElaboration *motore = new CElaboration(FileName);
if (motore != NULL)
{
bResult = motore->Decriptare(sBuffer);
VariantClear(pVar);
pVar->vt = VT_BSTR;
pVar->bstrVal = sBuffer.AllocSysString();
sBuffer.ReleaseBuffer();
delete motore;
motore = NULL;
}
return bResult;
}
Проблема осталась .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.