我有一个不寻常的情况,我需要创建一个DLL,声明一些符号是预先确定的内存位置。它是一个嵌入式系统,带有一堆使用共享内存的模块,它总是从同一个位置开始。
C源文件都包含一堆样板文件,如下所示:
__declspec(dllimport) struct shmem_block {
unsigned char dum0000001[4952];
int _yallahabibi[1];
} arftest;
为了使这项工作,我需要编译并链接一个DLL,该DLL声明arftest指向特定的内存位置。怎么能创建这样的DLL?使用C,我可以声明一个指针并使其指向某处,但是如何使变量名(符号)指向内存位置?
答案 0 :(得分:0)
由于Windows中的内存虚拟化和保护,我认为您必须实现设备驱动程序才能直接访问物理内存。
通常,数据对象到特定位置的位置需要编译器扩展和链接器支持;因此,如果支持,这将是特定工具链。
在一般情况下,您将使用指针而不是实例化对象; e.g:
volatile my_struct* my_object = (my_struct*)0x00008000;
然后通过指针访问数据; e.g:
my_object->some_member = 0x00080 ;
或者,在C ++中,您可以使用 placement new 。