2011-09-14 177 views
1

我有一個非託管MFC應用程序。我爲應用程序編寫了一個CLI包裝器,並將其轉換爲一個DLL。未經處理的代碼具有用於在這裏和那裏顯示消息的字符串表資源。在託管代碼中使用非託管dll中的資源字符串表

現在我可以調用C#中的非託管代碼並使用內部邏輯。但是當它試圖讀取資源字符串時,代碼出錯了。我希望資源沒有加載,所以我嘗試從kernel32.dll中包含一個P/invoke LoadLibraryEx,但仍然沒有用。我如何讓非託管代碼使用其資源文件?它可以這樣做,還是應該修改?

謝謝。

+0

可以重新拋出異常,與本地化異常字符串填寫消息,如果你的異常類包含一個特別是恢復與每個拋出的異常相關的id。 –

回答

0

您可以使用UNICODE字符串重新構建MFC,聲明導出函數,使用語言ID,資源字符串ID以及返回該引用ID和語言環境的字符串。

而且在管理組件如下

[DllImport("resource.en-US.dll")] 
string GetResourceString(int LANGUAGE_ID, int IID); 

使用它,並,例如:

try 
{ 
    ... 
} 
catch(MyException ex) 
{ 
    throw new ApplicationException(GetResourceString(ex.Language, ex.ResourceID), ex) 
} 
+0

我不知道我是否讓我的問題不清楚,或者我沒有理解您的解決方案。對不起,如果沒有。我想使用該dll內的dll內部的資源。我不想在dll被調用的地方使用它。代碼錯誤出現在試圖使用資源字符串表的dll代碼中。 –