2012-09-14 80 views
1

一直在尋找這一個高和低,似乎無法弄清楚。如何使用c dll從c#項目讀取文件?

所以我在Visual Studio中使用c#項目製作一個web應用程序。我的解決方案中有另一個項目,它是一個編譯爲dll的c項目。我已經到了可以在兩者之間傳遞信息的地步,而且它的工作是正確的。

在我的應用程序中,用戶上傳文件並將其保存到文件系統的「includes」文件夾中。該dll(從我從sdk獲得的C代碼編譯)應該讀取該文件並對其進行解碼。當我將它編譯爲exe文件並將其發送到文件路徑時,dll項目工作正常。

我的問題是,我怎樣才能得到DLL(現在在bin文件夾)跳過一個目錄並抓住這個文件?我試過將文件路徑硬編碼到c代碼中,但它不起作用。

FILE *fp; 
bool isWorking = false 
if(fp = fopen("../Include/testFile.fit", "r")) 
    isWorking = true 

我也試着寫只是從DLL一個文本文件,希望能找到它彈出來,並使用該目錄作爲參考,但C代碼沒有創建和保存文件在所有在這種情況下。

+0

我建議不要將您的應用程序文件夾用作文件存儲。我總是發現很好的做法是將兩者分開,或者至少確保文件位於單個固定文件夾中(完整路徑可以硬編碼或在配置文件中設置),而不是使用相對路徑。 – Flater

回答

0

DLL文件在文件系統中的位置並不重要。重要的部分是生成的二進制文件運行的位置以及它看作其當前工作目錄的位置。

如果您的C#程序使用DL​​L,則DLL中的代碼將與C#程序的當前工作目錄一起運行(除非您在DLL中的代碼中更改它)。

因此,您應該嘗試以相同的方式加載文件,關於路徑,就好像您要從C#程序加載它一樣。

+0

這就是我最初的想法,但它不打開文件,我想不出一個好的方法來調試它。 – Ian

+0

@Ian您可以通過檢查當前工作目錄在DLL代碼中進行調試。一個快速調試'printf'應該告訴你所有你需要知道的使用http://msdn2.microsoft.com/en-us/library/sf98bd4y(VS.80).aspx – HonkyTonk

+0

如何從dll執行printf?無法從c程序獲得控制檯。 – Ian