Здравствуйте, 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;
}
Проблема осталась

.