![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
строки из DLL
starling13 © (2005-10-23 00:09:00)Помогите, пожалуйста.
Есть DLL на с. В нём функция, что-то типа:
extern "C" __export void Func1(char * String1, char * String2)
{
string1[0] = 'a'; string1[1] = '\x0';
string2[0] = 'b'; string2[1] = '\x0';
}
Вызываю из программы на Delphi:
...
procedure Func1(String1: PChar; String2: PChar); external 'My.dll' name '_Func1';
...
var String1, String2: string;
...
Func1(PChar(String1), PChar(String2));
...
String1 получает своё значение, а на операции со String2 Access violation...
starling13 (2005-10-23 16:46:00) [1]Так, бросаю слепые эксперименты и в библиотеку...
Lamer@fools.ua (2005-10-23 15:38:00) [2]>> starling13 © (23.10.05 13:35) [9]
Верно. Строки есть. Память под них выделена. Только у этой памяти нету атрибута PAGE_WRITE (или как там его) ибо строки константные. Посему писАть туда низзя.
starling13 (2005-10-23 13:35:00) [3][1] - так ведь в [4] строки есть и имеют длину 2, значит есть куда писать?..
Lamer@fools.ua (2005-10-23 13:31:00) [4]>> isasa © (23.10.05 13:18) [5]
extern "C", насколько я помню, отключает name mangling.
>> starling13 © (23.10.05 12:49) [4]
[1] упорно игнорируете? Ну тогда успехов.
starling13 (2005-10-23 13:31:00) [5]Но функция Func1 выполняет и другие действия (выводит модальное окно), которые налицо.
isasa (2005-10-23 13:19:00) [6]Сорри,
_Func1 -> _Func1@64 (2x32=64) ?????
isasa (2005-10-23 13:18:00) [7]А ты уверен, что в DLL есть точка входа Func1, а не Func1@64?
Другими словами, см *.DEF файл.
starling13 (2005-10-23 12:49:00) [8]Что-то не то... Вот так тоже не работает:
...
procedure Func1(String1: PChar; String2: PChar); external 'My.dll' name '_Func1';
...
var String1, String2: string;
...
String1 := 'aa';
String2 := 'bb';
...
Func1(PChar(String1), PChar(String2));
...
А если
procedure Func1(String1: PChar; String2: PChar); cdecl; external 'My.dll' name '_Func1';
то сразу AV
Lamer@fools.ua (2005-10-23 12:24:00) [9]Кстати.
> __export
Это, вроде, вообще не поддерживается в Win32. Это из Win16.
isasa (2005-10-23 09:17:00) [10]Вызывай
...
procedure Func1(String1: PChar; String2: PChar); cdecl;
Lamer@fools.ua (2005-10-23 00:20:00) [11]Где выделение памяти?