Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

строки из DLL   Найти похожие ветки 

 
starling13 ©   (2005-10-23 00:09) [0]

Помогите, пожалуйста.
Есть 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...


 
Lamer@fools.ua ©   (2005-10-23 00:20) [1]

Где выделение памяти?


 
isasa ©   (2005-10-23 09:17) [2]

Вызывай

...
procedure Func1(String1: PChar; String2: PChar); cdecl;


 
Lamer@fools.ua ©   (2005-10-23 12:24) [3]

Кстати.

>__export
Это, вроде, вообще не поддерживается в Win32. Это из Win16.


 
starling13 ©   (2005-10-23 12:49) [4]

Что-то не то... Вот так тоже не работает:
...
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


 
isasa ©   (2005-10-23 13:18) [5]

А ты уверен, что в DLL есть точка входа Func1, а не  Func1@64?
Другими словами, см *.DEF файл.


 
isasa ©   (2005-10-23 13:19) [6]

Сорри,
_Func1 -> _Func1@64 (2x32=64) ?????


 
Lamer@fools.ua ©   (2005-10-23 13:31) [7]

>>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) [8]

Но функция Func1 выполняет и другие действия (выводит модальное окно), которые налицо.


 
starling13 ©   (2005-10-23 13:35) [9]

[1] - так ведь в [4] строки есть и имеют длину 2, значит есть куда писать?..


 
Lamer@fools.ua ©   (2005-10-23 15:38) [10]

>>starling13 ©   (23.10.05 13:35) [9]

Верно. Строки есть. Память под них выделена. Только у этой памяти нету атрибута PAGE_WRITE (или как там его) ибо строки константные. Посему писАть туда низзя.


 
starling13 ©   (2005-10-23 16:46) [11]

Так, бросаю слепые эксперименты и в библиотеку...



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
2-1130240207
VEZ
2005-10-25 15:36
2005.11.13
Hex SpinEdit


2-1129474903
quadronik
2005-10-16 19:01
2005.11.13
присвоение даты в maskedit.text


1-1129877013
Шурик Ш
2005-10-21 10:43
2005.11.13
Хранение доп. строки для объекта TreeView


2-1129787778
andreyrid
2005-10-20 09:56
2005.11.13
Синхронная работа нескольких запросов ADOQuery


2-1129620796
T10000
2005-10-18 11:33
2005.11.13
Работа с датой ?