[英]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.