首页
社区
课程
招聘
[讨论]DLL的内存变量共享问题
发表于: 2015-2-1 14:35 4077

[讨论]DLL的内存变量共享问题

2015-2-1 14:35
4077
用VC6写的DLL, 在Delphi7可以实现内存变量共享

// cDllShareMemory.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
    return TRUE;
}

// 非共享内存数据
int LocalCount = 0; 

// 共享内存数据
#pragma data_seg ("shared")
	int GlobalCount = 0 ; 
#pragma data_seg ()

#pragma comment(linker,"/SECTION:shared,RWS")

#define DLLAPI extern "C" _declspec(dllexport)

//导出函数 非共享内存数据
DLLAPI int GetLocal(void) 
{
	return LocalCount++;
}

//导出函数   共享内存数据
DLLAPI int GetGlobal(void)
{
	return GlobalCount++;
}

/*
	//delphi7调用代码
	function GetLocal(): integer; stdcall; external 'cDllShareMemory.dll' name 'GetLocal';
	function GetGlobal(): integer; stdcall; external 'cDllShareMemory.dll' name 'GetGlobal';
	
	procedure TForm1.Button2Click(Sender: TObject);
	begin
		form1.Memo1.Lines.add('Local='+inttostr(GetLocal)+' Global='+inttostr(GetGlobal));
	end;

*/

但不知道这个DLL用Delphi7要怎么写
网上找到的方法一般都用CreateFileMapping来实现

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
2
delphi7可以告知编译器将变量存储到指定的区段并设置属性么,可以的话就没问题.
不然的话就老老实实CreateFileMapping或者自己patch目标文件或最终文件.
2015-2-1 14:40
0
雪    币: 345
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
CreateFileMapping比较好
2015-2-1 16:15
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
Delphi的编译器没那么高级,是不支持共享段的。
Delphi的编译器实在是不想吐槽了,连个文件对齐都是定死在1000h的
2015-2-1 18:34
0
游客
登录 | 注册 方可回帖
返回
//