{------------------------------------}
{过程名:DLL入口函数
过程功能:进行DLL初始化,释放等
过程参数:DLL状态}
{------------------------------------}
procedure DLLEntryPoint(Reason:integer);
begin
case Reason of
DLL_PROCESS_ATTACH:OpenShareData ;
DLL_PROCESS_DETACH:CloseShareData ;
end;
end;{------------------------------------}
{过程名:打开数据共享
过程功能:建立映象文件
过程参数:无}
{------------------------------------}
procedure OpenShareData;
begin
MapHandle:=CreateFileMapping($FFFFFFFF,
nil,
PAGE_READWRITE,
0,
$ffff,
'MyMap');
if MapHandle<>0 then
begin
Buffer:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,0);
if Buffer=nil then
CloseHandle(MapHandle);
end
else if GetLastError = ERROR_ALREADY_EXISTS then
begin
MapHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'MyMap');
if MapHandle = 0 then
Exit;
end
else
Exit;
end;
请高手们帮忙看看,这段代码中哪里导致非法访问内存??如何修改?DLLProc已经指向DLLEntryPoint进程的地址。
{过程名:DLL入口函数
过程功能:进行DLL初始化,释放等
过程参数:DLL状态}
{------------------------------------}
procedure DLLEntryPoint(Reason:integer);
begin
case Reason of
DLL_PROCESS_ATTACH:OpenShareData ;
DLL_PROCESS_DETACH:CloseShareData ;
end;
end;{------------------------------------}
{过程名:打开数据共享
过程功能:建立映象文件
过程参数:无}
{------------------------------------}
procedure OpenShareData;
begin
MapHandle:=CreateFileMapping($FFFFFFFF,
nil,
PAGE_READWRITE,
0,
$ffff,
'MyMap');
if MapHandle<>0 then
begin
Buffer:=MapViewOfFile(MapHandle,FILE_MAP_ALL_ACCESS,0,0,0);
if Buffer=nil then
CloseHandle(MapHandle);
end
else if GetLastError = ERROR_ALREADY_EXISTS then
begin
MapHandle := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, 'MyMap');
if MapHandle = 0 then
Exit;
end
else
Exit;
end;
请高手们帮忙看看,这段代码中哪里导致非法访问内存??如何修改?DLLProc已经指向DLLEntryPoint进程的地址。
解决方案 »
- 问几个设计的问题,说说大家都是怎么做的
- ADO 找不到可安装的ISAM
- 如何将一个控件设置为不可覆盖。我的TShape控件老是TLabel控件覆盖,有没有办法设置TShape控件的级别高于TLabel
- 如何将数值写入相关字段???
- 怎样给Panel添加Transparent属性
- 处于Edit状态下的TADODataSet在什么情况下会退出Edit状态?
- 各位大虾:如何避免Image闪烁?分不够再加.
- 怎么样把网页里表格的数据通过delphi写的程序导入到数据库中去。
- 新手:这是什么意思?
- 都来看看,下面的代码是否能够执行(delphi+sql)
- 紧急求救:关于TDBCHART的使用方法,请高手指教!!!
- 我怎样把EDIT嵌入stringgrid里面?
HANDLE hFile, // handle to file to map
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
// optional security attributes
DWORD flProtect, // protection for mapping object
DWORD dwMaximumSizeHigh, // high-order 32 bits of object size
DWORD dwMaximumSizeLow, // low-order 32 bits of object size
LPCTSTR lpName // name of file-mapping object
);
// 这个函数调用好像没错..LPVOID MapViewOfFile(
HANDLE hFileMappingObject, // file-mapping object to map into
// address space
DWORD dwDesiredAccess, // access mode
DWORD dwFileOffsetHigh, // high-order 32 bits of file offset
DWORD dwFileOffsetLow, // low-order 32 bits of file offset
DWORD dwNumberOfBytesToMap // number of bytes to map
);
// 也正确...函数调用没有问题...你把这些函数拷贝到本工程调用试试 看是不是调用DLL的问题
Fun:function(......):integer;StdCall;Module:=LoadLibrary('xx.dll');
@fun:=GetProcAddress(Module,'export_function');
调用函数;
Freelibrary(Moudle);
一般 是定义一个函数指针 然后再
Module:=LoadLibrary('xx.dll');
if Module > 0 then
begin
pfun := GetProcAddress(Module,'export_function');
end;...........
HANDLE hFileMappingObject, // file-mapping object to map into
// address space
DWORD dwDesiredAccess, // access mode
DWORD dwFileOffsetHigh, // high-order 32 bits of file offset
DWORD dwFileOffsetLow, // low-order 32 bits of file offset
DWORD dwNumberOfBytesToMap // number of bytes to map
);
// 应该没错
你在每个API函数后都调用一下GetLastError看看里面的错误代码即可