作者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/m.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