2014-01-16 18 views
1

我使用的是嵌入式JavaScript引擎,我曾經將fopen()的結果作爲數字傳遞給JS代碼。如何將FILE *轉換爲64位系統中的數字句柄?

int numeric_handle = (int)fopen(*P1, "rb"); 
return Number::New(numeric_handle); // Return to JavaScript 

但現在我需要在64位系統上重新編譯,我也得到

fatal error: cast from pointer to smaller type 'int' loses information 

現在我有點卡住了,我怎麼把我的系統的設計,但變化少代碼可能?我正在考慮有一個散列圖,一個保存FILE *的數組,並在該數組中返回一個ID。但是這意味着額外的內存管理,額外的查找。

+0

是'::'純C語法嗎?我只是知道它的含義,從C++ – dhein

+0

這是C++,但我堅持老好fopen(),fread()文件IO – exebook

+0

在Linux上,你可以使用'fileno'。 Visual Studio有類似的'_fileno'。 – Simple

回答

0

我當然會「隱藏實際的類型」,換句話說,使用mapvector或一些類似類型的存儲FILE *,並通過index或任何需要檢索FILE *的電話去說需要它。這樣,打開文件的方式並不重要(例如,稍後您可能會想要使用fstream和C++,這樣將難以作爲某種副本進行存儲)。

2

長應該是足夠的,但你可以使用一個字節的緩衝區太

FILE *f; 
char buffer[sizeof(f)]; 
memcpy(buffer, &f, sizeof(f)); 

爲什麼你需要這樣的黑客?

+1

我嵌入JavaScript引擎,並希望在我的腳本中使用fopen()。 JavaScript中沒有指針類型,只有數字或字符串。 – exebook

+0

當然,在Windows上,long是4個字節 –

1

從cstdint中使用像intptr_t這樣的指針大小的整數。