好的,我希望我能正确解释这个.我有一个结构:
typedef struct _MyData
{
char Data[256];
int Index;
} MyData;
Run Code Online (Sandbox Code Playgroud)
现在,我遇到了一个问题.大多数情况下,MyData.Data可以使用256,但在某些情况下,我需要将它可以容纳的字符数量扩展到不同的大小.我不能使用指针.有没有办法在运行时调整数据大小?怎么样?代码表示赞赏.
谢谢
编辑:
虽然我非常感谢所有的评论,但"也许试试这个......"或"那样做",或"你是什么东西是错的......"评论没有帮助.代码是这里的帮助.如果您知道代码后面的答案,请继续.
和:
1-不能使用指针.请不要试图弄清楚为什么,我只是不能 - 结构被注入到另一个程序的内存中.这就是为什么.没有指针.
抱歉这里有点粗糙,但我在这里问了一个问题,因为我已经尝试了所有可能有用的不同方法.再次,我正在寻找代码.在这一点上,我对"可能工作......"或"你考虑过这个......"不感兴趣
谢谢你,我再次道歉
编辑2
为什么这个设置得到回答?
我需要使用 DLL 来实现类似于 Linux 共享内存的功能。我的Windows编程经验很少,但我认为有可能实现我的目标。我想要类似下面的东西:
DLL
int x;
void write(int temp)
{
x = temp
}
int read()
{
return x;
}
Run Code Online (Sandbox Code Playgroud)
流程一:
LoadDLL();
write(5); //int x = 5 now
Run Code Online (Sandbox Code Playgroud)
流程2:
LoadDLL();
printf(read()); //prints 5 since int x = 5 from Proccess 1
Run Code Online (Sandbox Code Playgroud)
当然,这个例子忽略了竞争条件等,但是有没有一种简单的方法来处理这样的事情呢?
我将使用 Microsoft Visual Studio 10 来创建 DLL。有人可以解释一下我如何编写这么简单的东西并将其构建到一个可以加载和调用的 DLL 中,类似于上面的伪代码吗?
编辑:共享内存段和内存映射文件无法使用,因为我正在创建的进程是在LabVIEW和Lua中,它们不支持上述内容。然而,它们确实支持 DLL,这就是我需要这种“过时”方法的原因。
我有一个DLL项目,它使我的应用程序中使用的所有显示字符串的单例.问题是我需要在许多独立运行的应用程序中引用此DLL.
我明白,如果我引用的DLL项目中的所有独立运行的应用程序,他们将所有的DLL加载到内存中,使个别单身人士,他们可以参考,但是这是冗余我想避免.
有没有办法可以将这个单例的一个实例保存在内存中并从所有独立项目中引用它?
我知道我可能听起来很愚蠢,而且这种装载可能根本不会发生,但我现在一直在搜索大约一个小时:)
我使用.NET框架和C#作为目标语言.
在Linux中,如果父进程有任何数据结构(例如,树,列表),那么这些数据结构是否由子进程继承?我的意思是,孩子是否可以访问相同的数据结构(任何指向该数据结构的指针)?
我在程序A中使用以下代码创建共享内存:
shm = shm_open("/mfs_hash_pool_container", O_CREAT|O_RDWR, 0666);
size = sizeof(struct mfs_hash_pool_container);
ftruncate(shm, size);
mfs_hash_pool_stat_p = (struct mfs_hash_pool_container *)mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, shm, 0);
Run Code Online (Sandbox Code Playgroud)
我用它来存储哈希表.
另一个程序B将从程序A接收addr(mfs_hash_pool_stat_p + offset)发送,但是我不能用B写它.这是否意味着我还必须在B中打开这个共享内存?有没有其他方法可以解决这个问题?因为我自动创建这个内存.
谢谢你们.
考虑一下,我有两个 Windows 独立 GUI 应用程序。每当我在第一个 GUI 中按下命令按钮时,其他 GUI 都应该捕获按钮的状态,并且应该在其中的文本框中显示 ON 或 OFF。如何使用共享内存来做到这一点。
PS:我使用的是 VC++ 2008。