这不能代表什么啊!
不过我希望大家都是VC的高手!hehe
不过我希望大家都是VC的高手!hehe
解决方案 »
- delphi 关于图片加载问题
- 如何获取字符串中字符的ASCII值
- delphi 7.0+ADO+access 制作的程序在有的机器上安装后,连不上数据库,是什么原因?
- 请问TADODataSet为什么没有执行语句?? 在线等待! 急。
- 谁用过xp操作系统?
- 非常急的重大问题,请版主及各位兄弟帮忙,问题解决问题1000分奉送?? up有分
- 关于delphi数组问题
- myobject.free和FreeAndNil(myobject)有什么区别呢?
- 怎样判断今日是否是本月的最后一天?
- 时间问题?
- 让我的delphi程序在别台机器上跑起来?
- 在DELPHI中怎样将目录中的文件和目录逐条查询或显示出来并反映到List控件上
我写了一个,功能和 netstat 一样:)
[email protected]
如果仅仅拿一个TCP/UDP就能够说明一切的话,那言下之意也就是回答上来的都是高手了,再假如我问一个数据库的问题你能不能回答上来呢?可以保证吗高手?如果一个高手不能解决实际问题,那做高手做什么???以己之长度人之短,呵呵
delphi和vc是术业有专攻的。但我问的这个问题我想在delphi中应该可以解决。
只是看到没有人讨论,和vc中的讨论结果反差太大了,我才想到给大家一点激励。
呵呵,让Again兄误会了。
不过说个实话,高手都不会少吧。只是用VC的水平纯一点,而用DELPHI的就参差不齐了,水平高的固然不少,但也有不少人了解几个控件就自认是高手了。用候捷的一句话:只用一样东西而不了解它的原理,实在是不高明。
其实只有一个阵营:程序员。
应该分不同的场合用不同的语言吧,一个程序员精通多种编程语言,就像一个人会说多国语言
一样正常。vc,delphi只是我们手边的工具,重要的是怎样使用我们的智慧。
对于我们来说,数据库原理、Win32程序的体系结构,网络原理似乎更重要。
至于论坛的人气,大家共同培养吧。
主 题:内存映射文件,求救?
作 者:jettang
所属论坛:Delphi
问题点数:100
回复次数:5
人气指数:60
发表时间:2000-9-12 22:32:00
我用MapViewOfFile得到了内存映射文件的地址,但如何移动指针读取每个记录呢?谢谢? 回复贴子:
cjf回复于2000-9-12 23:52:00
如果你知道记录的结构,就可以直接移动了。
jettang回复于2000-9-13 9:54:00
用什么函数移
Firing_Sky回复于2000-9-13 11:07:00
得到一个指针Link
@Link:=@Link+RecordLength
jettang回复于2000-9-14 12:51:00
我试了出错 "left side cannot be assigned to"
Firing_Sky回复于2000-9-14 13:56:00
搞错了,好像只要用
procedure TForm1.Button1Click(Sender: TObject);
var
P:PChar;
begin
GetMem(P,100);
P:=P+4;
end;
-----------------------------------------Vc++-----------------------
主 题:我用MapViewOfFile得到了内存映射文件的地址,但如何移动指针读取每个记录呢?谢谢?
作 者:jettang
所属论坛:Visual C++
问题点数:50
回复次数:3
人气指数:35
发表时间:2000-9-12 22:48:00
回复贴子:
Holly回复于2000-9-13 3:22:00 示例:
...
HANDLE hMapObject = NULL;
LPVOID lpvMem = NULL;
LPBYTE lpMyTmp = NULL;
hMapObject = CreateFileMapping(
INVALID_HANDLE_VALUE,
NULL,
PAGE_READWRITE,
0,
4096,
"MyMemFileMap");
if (hMapObject == NULL)
return;
lpvMem = MapViewOfFile(
hMapObject,
FILE_MAP_WRITE,
0,
0,
0);
if (lpvMem == NULL)
return;
//第1个使用:将0-1023处置为大写'A'
memset(lpvMem, 'A', 1024); //第2个使用:将1024-2047处置为大写'B'
memset((LPBYTE)lpvMem + 1024, 'B', 1024); //第3个使用:将2048-3071处置为大写'C'
memset((LPBYTE)lpvMem + 2048, 'C', 1024); //第4个使用:将3972-4095处置为大写'D'
memset((LPBYTE)lpvMem + 3072, 'D', 1024); //第5个使用:将100处置为大写'X'
*((LPBYTE)lpvMem + 99) = 'X'; //第6个使用:将101处置为大写'Y'
lpMyTmp = (LPBYTE)lpvMem + 100;
*lpMyTmp = 'Y';
UnmapViewOfFile(lpvMem);
CloseHandle(hMapObject);
Holly回复于2000-9-13 4:08:00
typedef struct tagMEMTEST
{
DWORD dwVar1;
WORD wVar2;
WORD wVar3;
BYTE abyVar[4];
}MEMTEST, *LPMEMTEST;
... //第7个使用:使用结构;
LPMEMTEST lpMemTest = (LPMEMTEST)((LPBYTE)lpvMem + 10);
lpMemTest->dwVar1 = 0x01001000;
lpMemTest->wVar2 = 0x0200;
lpMemTest->wVar3 = 0x0300;
lpMemTest->abyVar[0] = 1;
lpMemTest->abyVar[1] = 2;
lpMemTest->abyVar[2] = 3;
lpMemTest->abyVar[3] = 4;
Dlf回复于2000-9-13 9:17:00
如Holly所说,用结构,进行指针的强制转换,用结构读取记录。 ??????????????????????????????????????????????????????????????????????????
以上是同一个问题的遭遇,而我在delphi中至今未有答案
var
Address : Pointer;
hMapFile : THandle;
MapFilePointer : Pointer;
begin
hMapFile := CreateFileMapping(INVALID_HANDLE_VALUE,
nil,
PAGE_READWRITE,
0,
4096,
'MyMemFileMap');
if hMapFile <> 0 then
MapFilePointer := MapViewOfFile(hMapFile,File_Map_All_Access,0,0,0)
else begin
ShowMessage('err');
exit;
end;
if MapFilePointer = nil then exit; //第1个使用:将0-1023处置为大写'A'
FillChar(MapFilePointer^, 1024, Ord('A')); //第2个使用:将1024-2047处置为大写'B'
Address := PChar(MapFilePointer)+1024;
FillChar(Address^, 1024,Ord('B')); //第3个使用:将2048-3071处置为大写'C'
Address := PChar(MapFilePointer)+2048;
FillChar(Address^, 1024,Ord('C')); //第4个使用:将3972-4095处置为大写'D'
Address := PChar(MapFilePointer)+3072;
FillChar(Address^, 1024,Ord('C')); //第5个使用:将100处置为大写'X'
Address := PChar(MapFilePointer)+100;
PChar(Address)^ := 'X'; //第6个使用:将101处置为大写'Y'
Address := PChar(MapFilePointer)+101;
PChar(Address)^ := 'Y'; UnmapViewOfFile(MapFilePointer);
CloseHandle(hMapFile);
//对于结构,
Address := PChar(MapFilePointer)+Sizeof(yourstruct);
end;
注:这是指针的基本用法。delphi比C稍微麻烦一点,就在于delphi中只能先转换为PChar。
p1:=Pointer(integer(MapFilePointer)+sizeof(recordofmapfile));