2012-04-20 29 views
2

我想從使用unicode構建的MFC應用程序使用非unicode庫。但是,我不確定是否有發生事件的可能性,如非意圖內存分配,非Unicode代碼庫內部的字符串處理。對使用​​unicode構建的應用程序使用非unicode庫的影響

請解釋任何含義或提供資源頁面。

+0

你想用你的應用程序構建一個庫?你的應用程序是編譯器/鏈接器嗎?或者你的意思是你想從你的unicode應用程序加載一個非unicode庫? – 2012-04-22 00:42:50

+0

我的意思是我需要從我的unicode應用程序加載一個非unicode庫。我需要了解這種庫在unicode環境下的行爲。任何想法請。 – nimoz 2012-04-23 04:16:25

+0

非unicode庫是否也使用MFC? – 2012-04-23 04:35:31

回答

2

應用程序是否爲Unicode是編譯時而不是運行時的區別 - Unicode可執行文件無法加載ANSI DLL的原因並不存在。如果應用程序和DLL都使用MFC,則它們將鏈接到不同的MFC運行時,這可能會導致問題,但因爲情況並非如此,所以應該沒問題。

需要注意的地方是確保在DLL和應用程序之間傳輸的任何字符串數據都被一致解釋。大多數情況下,這只是需要在ANSI和Unicode之間進行轉換,而Windows提供的API函數可讓您輕鬆完成此操作。

但是,您應該檢查頭文件中是否編譯Unicode時所編譯的數據類型與編譯ANSI時所解釋的數據類型不同。例如,如果的DLL功能之一被宣佈爲

DWORD process_string(TCHAR * string) 

則非Unicode庫將其解釋TCHAR爲char,但你的應用程序將其解釋爲wchar_t的,隱藏的是你需要的字符串轉換的事實在調用該函數之前調用ANSI。

+0

@ktai,如果你看到這個,你可以發佈一個新的問題鏈接到這個,或給我發電子郵件。但基本上如果頭文件不兼容,你可以複製並修復它們,或者只是使用強制轉換,例如'process_string((TCHAR *)「hello」)'(但要確保包含註釋來解釋* why * you '重鑄或它看起來像一個錯誤)。 – 2015-11-30 20:04:49