作者UNARYvvv (有趣生活)
看板C_and_CPP
标题Re: [问题] VC中 程式区段变数初始化问题
时间Tue Dec 20 13:06:39 2005
※ 引述《orc1424 (小狗撒尿1424)》之铭言:
: 在VC里面 我写了一个.dll
: 假设我想要把某一段程式(当然这边单指变数)
: 放在可供其他程式(其他藉由dll来存取)读取的区段
: (就是dll之间的share)
: 我必须这样写(里面有个简单的结构POINT)
: 但是如果我不经过初始化
: 他不会认同我把这个变数放在mySection Section
: 他会说他找不到mySection Section
那是因为你用错 section 了
data section 本来就是要放有初始化的变数
如果你想一开始宣告变数,但是不用直接初始化的话
应该使用 bss section,再把变数放在里面
请查 #pragma bss_seg
: //****** 程式码开始
: #pragma data_seg ("mySection")
: POINT pq = { 0, 0 };
: #pragma data_seg ()
: #pragma comment(linker, "/SECTION:mySection,RWS")
: //****** 程式码结束
: 问题:
: 今天还好是一个简单的POINT我可以这样初始化
: 如果今天是很复杂的结构咧?
: 或是一个超级复杂的class
如果用 C 来写的话
不想宣告就使用 POINT pq = {0,0} 来定义 struct 内容
大概就得先把 struct 变数,例如宣告一个 POINT pq; 在 bss_seg 之中
然後自己写个用来设定其各资料成员值的函式
在程式开始後,再自行呼叫那个初始用的函式
如果用 C++
那 struct 和 class 都可以透过 constructor 来处理初始化的工作
就可以放在 data_seg 了
以下程式片段给你参考一下 (测试过可编译)
class c {
public:
c(int x,int y) : _x(x),_y(y) {}
private:
int _x,_y;
};
#pragma data_seg("123")
c c0(1,2);
#pragma data_seg()
: 我还是必须用原来的方法吗?
: 还是有更好的解决办法呢?
: 所有错误我都会虚心接受指正 谢谢各位的指教
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.20.3
※ 编辑: UNARYvvv 来自: 140.129.20.3 (12/20 13:12)
1F:推 HZYSoft:C++ 还可以利用 placement new 来达成 12/20 17:43
2F:→ HZYSoft:你可以在 DllMain process attach 时呼叫, detach 时解构 12/20 17:43
3F:推 UNARYvvv:了解^^ 多谢补充用 C++ 的其他方法~ 12/20 20:12
4F:推 orc1424:感谢以上两位 谢谢 12/20 22:09
5F:推 orc1424:XD被m咧 好好玩 12/21 18:42