簡體   English   中英

在發布版本中將C#字符串傳遞給C ++ dll失敗

[英]pass C# string to C++ dll fails in Release build

我有一個簡單的函數的C ++ DLL

#ifdef BUILDING_THE_DLL
#define EXPORTED __declspec(dllexport)
#else
#define EXPORTED __declspec(dllimport)
#endif
 ...
EXPORTED void AddSetting(char *key, char *value)

和一個帶有函數聲明的C#項目:

[DllImport("pers.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void AddSetting(string key, string value);

當C#項目在Debug模式下構建時,一切都運行良好。 在Release版本中,會觸發一個異常:“嘗試加載格式不正確的程序。”

有任何想法嗎?

UPD:在C#項目中,平台目標在調試模式下設置為x86,在發布中設置為任何CPU。 我在Release中更改為x86,這是解決方案。 非常感謝Matt。

默認情況下,您需要指定使用字符串的ansi格式。 它是unicode。 它應該是 :

[DllImport("pers.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet::Ansi)]
public static extern void AddSetting(string key, string value);

此外,如果函數“AddSetting”修改字符串,則需要在C#中使用StringBuilder。 有關詳細信息,請參閱此MSDN 文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM