Надеюсь, кто-нибудь может объяснить, в чем именно разница:
В моей программе на C # я хочу передать строку в метод C ++.
Мой код в C # выглядит так:
[DllImport("Test.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern String DoIt(String filename);
Внутренняя часть моей C ++ DLL выглядит так:
__declspec(dllexport) CString DoIt(char* szFilename)
{
....
}
Если я передаю строку (например: C: \ temp \ my.txt), она становится деформированной => "Ôœ & ° 8é -".
Теперь наступает запутанная часть, которую я не могу понять. Если я изменю тип возврата с CString на char *, то все в порядке.
__declspec( dllexport ) char* DoIt(char* filename)
Почему это так? CharSet в C # уже настроен на Ansi для маршала String в нужный тип. Я не могу понять, где находится связь между типом возврата и моей передаваемой строкой.
Если вам нужна дополнительная информация, просто дайте мне знать.