Вызов функции и передача в нее указателя
|
От: |
indee
|
|
| Дата: | 11.05.06 12:42 |
|
Оценка: |
|
Как в C# вызвать функцию из Dll и передать в нее как параметр указатель на строку?
Dll написана на Delphi, прототип функции:
MyFunc(val : pointer)
где val — указатель на строку (PChar).
Объявление и вызов функции:
[DllImport("MyDll",)]
private extern static void MyFunc( ref String MyStr);
....
String str = "";
MyFunc( ref(str));
MessageBox.Show(str);
не принес никаких результатов.
Как это сделать правильно?
Спасибо.
Re: Вызов функции и передача в нее указателя
Здравствуйте, indee, Вы писали:
I>Как это сделать правильно?
Если функция модифицирует строку:
[DllImport("MyDll.dll", CharSet=CharSet.Auto)]
private static extern void MyFunc([Out] StringBuilder MyStr);
если не модифицирует:
[DllImport("MyDll.dll", CharSet=CharSet.Auto)]
private static extern void MyFunc(string MyStr);
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
Re[2]: Вызов функции и передача в нее указателя
|
От: |
indee
|
|
| Дата: | 11.05.06 14:25 |
|
Оценка: |
|
Не работают оба примера.
В Dll я "вижу" передаваемый адрес, но в C# строка с этим адресом не изменается.
Re: Вызов функции и передача в нее указателя
|
От: |
indee
|
|
| Дата: | 15.05.06 07:19 |
|
Оценка: |
|
Может кто-нибудь знает, а?
Re[2]: Вызов функции и передача в нее указателя
|
От: |
Fortnum
|
|
| Дата: | 15.05.06 07:43 |
|
Оценка: |
|
Здравствуйте, ekamaloff, Вы писали:
E>Здравствуйте, indee, Вы писали:
I>>Как это сделать правильно?
E>Если функция модифицирует строку:
[DllImport("MyDll.dll", CharSet=CharSet.Auto)]
private static extern void MyFunc([Out] out StringBuilder MyStr);
или
[DllImport("MyDll.dll", CharSet=CharSet.Auto)]
rivate static extern void MyFunc(out StringBuilder MyStr);
Re[2]: Вызов функции и передача в нее указателя
Здравствуйте, indee, Вы писали:
I>Может кто-нибудь знает, а?
Попробуй использовать атрибут MarshalAs при объявлении функции.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[2]: Вызов функции и передача в нее указателя
|
От: |
Аноним
|
|
| Дата: | 23.05.06 15:29 |
|
Оценка: |
|
Здравствуйте, indee, Вы писали:
I>Может кто-нибудь знает, а?
Вот кусок из проекта, все имена изменены
[DllImport("MyWrapper.dll", CharSet=CharSet.Unicode, ExactSpelling=false, EntryPoint="Func1")]
private static extern int Func1(
System.Text.StringBuilder Recipents
);
StringBuilder rec= new StringBuilder(string.Empty, 2048);
Func1(rec);
То есть я память выделял в c#, а в функции использовал не больше...
Пока на собственное сообщение не было ответов, его можно удалить.