C# импорт DLL и шаманство с CString (MFC) <-> string
От: biocheshire  
Дата: 09.08.06 11:16
Оценка: :)
Hi, All
Помогите плз с моим горем
Есть длл (unmanaged С++), экспортирующая функцию вида
int Login(CString log, CString pass);
Импортирую это в C#, тут она определена как

[DLLimport]
public static extern int Login(string u, string p);


Вызывается нормально, строки u и p воспринимаются функцией адекватно.
Но уже при выполнении кода из DLL:

CString gUser, gPass;
...
int declspec(__dllexport) Login (CString user, CString pass)
{
...
gUser = user;

//Прога на C# выдает
//************** Exception Text **************
//System.NullReferenceException: Object reference not set to an instance of an object.
gPass = pass;
}


Собственно в чем баг, в том, что CString (MFC) и string(.NET) по-разному устроены?
Как нормально вызвать Login() из C# в этом случае?
Re: C# импорт DLL и шаманство с CString (MFC) <-> string
От: Mab Россия http://shade.msu.ru/~mab
Дата: 09.08.06 11:32
Оценка: +1
Здравствуйте, biocheshire, Вы писали:
B>Собственно в чем баг, в том, что CString (MFC) и string(.NET) по-разному устроены?
Да.

B>Как нормально вызвать Login() из C# в этом случае?

Использовать plain-C строки при интеропе.
Re[2]: C# импорт DLL и шаманство с CString (MFC) <-> string
От: biocheshire  
Дата: 09.08.06 14:00
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Использовать plain-C строки при интеропе.

Угу, вроде получилось, спасибо
Теперь вот такая трабла..
ДЛЛ теперь на managable C++:

int GetValue(System::string *data)
{
CString someValue;
/*
происходят манипуляции, после которых
полученные данные (строку в CString) необходимо 
скинуть в data же
(data = someValue - не проходит ессно)
Вопрос1:
Как загрузить текст из CString в System::String, какие методы этих классов юзать?
*/
}


Вопрос 2:
Как в таком коде (уже на C#) с учетом вопроса №1

...
[DLLImport]
public static external GetValue(string data);
string strVar;
...
GetValue(strVar);

..сделать так, чтобы strVar изменился после выполнения функции GetValue (указателей же нет )
Re[3]: C# импорт DLL и шаманство с CString (MFC) <-> string
От: Mab Россия http://shade.msu.ru/~mab
Дата: 09.08.06 14:20
Оценка:
Здравствуйте, biocheshire, Вы писали:

B>Угу, вроде получилось, спасибо

Судя по написанному дальше, Вы вряд ли поняли, что именно я предлагал.

B>ДЛЛ теперь на managable C++:

Тогда не нужен pinvoke.

B>Как загрузить текст из CString в System::String, какие методы этих классов юзать?

См. класс Encoding.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.