作者OfficeGL (妤欣)
看板C_and_CPP
标题[问题] dll 资料存取问题与相依性
时间Fri Aug 9 11:25:00 2019
目前有一个 dll 专门负责提供
a. 资料 get / set
b. 资料存取
作法
C.h 宣告资料的阵列
A程式 include C.h
A程式 透过档案IO读取资料存到 C.h 宣告的阵列中
C程式 include C.h
C程式 提供一些 get /set 方法给其他人用
并打包成 dll
现在发现会出问题
程式 A 流程
a. 读挡到阵列 (C.h 宣告之阵列)
b. 透过 C.dll 的 get 函数拿资料
结果:却发现 get 出来的资料都是 0 (根本没有读到档案内容)
请问我哪里观念错了吗? 如何修正呢
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.136.29.40 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1565321102.A.8E2.html
1F:推 Schottky: C 程式的阵列和 A 程式不相干啊,不同程式不会共用变数08/09 13:00
2F:→ Schottky: 不过你的叙述不清,实际上错在哪还是要看原始码才知道08/09 13:01
补充~
c.h
int data [N];
c.c
#include "c.h"
int get (int i) { return data[i]; }
bool set(int i, int val) {
if(i < 0 || i >= N) return -1;
data[i] = val; return false;
}
a.c
#include "c.h"
bool read_data(char *file_path) {
// read file from file_path to data[i] for i = 0 to N-1 (declare in c.h)
}
main {
read_data ("xxx");
for i = 0 to N-1
// 都是印出 0 ........ ><........
print get(i) << endl;
}
file content like
2, 5, 18, 10, 6, ......
3F:→ tinlans: 先输出 A 和 C 里阵列的起始位址看看08/09 14:12
4F:→ firejox: 我觉得是1楼的情况08/09 14:33
※ 编辑: OfficeGL (114.136.29.40 台湾), 08/09/2019 16:14:08
5F:→ nh60211as: 你在get(int i)里面先把data[i]印出来看看08/09 21:52
6F:→ annies5: C没看到写档,A要从档案读取?08/10 10:28
a已经有写档了,而且写到共用的c.h宣告的变数~
※ 编辑: OfficeGL (114.136.29.40 台湾), 08/10/2019 11:39:23
7F:→ cole945: 你例子没贴完整人家怎麽帮你debug.. 最重要的dllexport 08/10 20:23
8F:→ cole945: 怎麽宣告的没写..你应该是data没dllexport变成到用各自的 08/10 20:23