powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FLL
6 сообщений из 6, страница 1 из 1
FLL
    #32473951
Pavlo Burov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите пожалуйта что нужно сделать:

делается FLL для VFP 7.0 в Visual C 6.0 из примеров MSDN

При компиляции идет все нормально при подключении тоже, а при выполнении ? REPLTOMH('D' , 2) выдается сообщение "API call caused an exception"

winapims.lib размером 85284 и датой создания 15.06.01 00:38
atls.lib 932792 и 05.01.02 15:17 (в поставке не нашел нашел его у знакомых)
pro_ext.h 37485 и 13.03.01 23:04

#include "pro_ext.h"

// Replicate char argument to memory allocated with _AllocHand().
// Return the memory handle to Visual FoxPro.
void FAR replToMH(ParamBlk FAR *parm)
{
char FAR *rep;
char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle);
MHANDLE mh;

if ((mh = _AllocHand((int) parm->p[1].val.ev_long + 1)) == 0)
{
_Error(182); // "Insufficient memory"
}
_HLock(mh);
rep = _HandToPtr(mh);
_MemFill(rep, c, (int) parm->p[1].val.ev_long);
rep[parm->p[1].val.ev_long] = '\0'; // null terminate
_HUnLock(mh);

_RetInt(mh, 10);
}

// Returns characters in memory handle.
// Argument in call from Visual FoxPro
// must be a valid Visual FoxPro memory handle.
void FAR MHToFoxString(ParamBlk FAR *parm)
{
char FAR *string;
MHANDLE mh = parm->p[0].val.ev_long;

_HLock(mh);
string = _HandToPtr(mh);
_RetChar(string);
_HUnLock(mh);
}

// Frees memory handle. Argument in call from
// Visual FoxPro must be a valid
// Visual FoxPro memory handle.
void FAR freeMH(ParamBlk FAR *parm)
{
_FreeHand((MHANDLE) parm->p[0].val.ev_long);
}

FoxInfo myFoxInfo[] = {
{"REPLTOMH", (FPFI) replToMH, 2, "C,I"},
{"MHTOFOX", (FPFI) MHToFoxString, 1, "I"},
{"FREEMH", (FPFI) freeMH, 1, "I"},
};
FoxTable _FoxTable = {
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
...
Рейтинг: 0 / 0
FLL
    #32474104
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал, все компилируется и выполняется без ошибок. Данная ошибка появляется только при вызове MHTOFOX() с указанием несуществующего MHandle. Т.е. при соблюдении порядка вызовов:
Код: plaintext
1.
2.
mh = REPLTOMH( "D" , 2 )
? MHTOFOX(mh)
FREEMH(mh)

все работает.

Встречный вопрос, а зачем все это нужно? Зачем нужен MHandle переменной на уровне фокса? Или я чего-то не понял...
...
Рейтинг: 0 / 0
FLL
    #32474157
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот рабочий вариант:
Код: 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.
void FAR replToMH(ParamBlk FAR *parm) 
{ 
#define p0 (parm->p[ 0 ].val)  
#define p1 (parm->p[ 1 ].val)  

char *rep; 
MHANDLE mh; 
char *c = (char *) malloc(p0.ev_length);
c = (char *) _HandToPtr(p0.ev_handle); 
if ((mh = _AllocHand((int) p1.ev_long)) ==  0 ) { _Error ( 182  );} 
_HLock(mh); 
rep = (char *) malloc(p1.ev_long);
rep = (char *) _HandToPtr(mh); 
_MemFill(rep, *c, (int)p1.ev_long);
rep[p1.ev_long] = '\0'; 
_HUnLock(mh); 
_RetInt((int)mh,  10 ); 
}

FoxInfo myFoxInfo[] = {
{ "RHM"               ,(FPFI)  replToMH,          2 , "CI"         },
};

FoxTable _FoxTable = {
	(FoxTable  *)  0 , sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
}; 
...
Рейтинг: 0 / 0
FLL
    #32474202
MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To XAndy:
Фокс работает с дискрипторами памяти , а не с указателями, а это
совершенно 2 различных структуры памяти.
...
Рейтинг: 0 / 0
FLL
    #32474360
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To MSDN:

Да уж понятно, что дескриптор это не адрес памяти. Вопрос был в другом, зачем на практике может понадобиться такой экзотичный способ доступа к участку памяти? Если нужно создать фоксовскую переменную из API-библиотеки, то есть специальная функция _NewVar( ).
...
Рейтинг: 0 / 0
FLL
    #32474943
Фотография NNN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глянь, может твой случай
http://support.microsoft.com/default.aspx?scid=kb;en-us;198130
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / FLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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