Вызов функции и передача в нее указателя
От: 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: Вызов функции и передача в нее указателя
От: ekamaloff Великобритания  
Дата: 11.05.06 12:57
Оценка:
Здравствуйте, 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]: Вызов функции и передача в нее указателя
От: Кастюкевич Сергей Беларусь  
Дата: 22.05.06 10:51
Оценка:
Здравствуйте, 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#, а в функции использовал не больше...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.