Использование Delphi 2010, я пытаюсь написать dll для mIRC. Вот некоторая информация из файла справки MircСоздание dll для mIRC с использованием Delphi 2010
Технические примечания
Этот раздел содержит техническую информацию для программистов, которые хотят создавать библиотеки DLL для использования с Mirc.
Процедура в DLL вызывается должна иметь вида:
INT __stdcall PROCNAME (HWND mWnd, HWND aWnd, символ * данные, символ * Parms, BOOL шоу, BOOL nopause)
mWnd это ручка главного окна mIRC.
aWnd - это дескриптор окна, в котором выдается команда, это может быть не активное окно, если команда вызывается удаленным скриптом.
данные - это информация, которую вы хотите отправить в DLL. При возврате DLL может заполнить эту переменную командой, которую хочет выполнить mIRC, если таковая имеется.
DLL, может возвращать целое число, чтобы указать, что он хочет Mirc сделать:
0 означает, что Mirc должен/привал обработки
1 означает, что Mirc следует продолжить обработку
2 означает, что он заполнил переменную данных командой, которую он хочет выполнить mIRC, и заполнил парты параметрами для использования, если они есть, при выполнении команды.
3 означает, что DLL заполнила переменную данных результатом, который должен возвращать $ dll() в качестве идентификатора.
Следующий код, который должен отменить ввод текста, компилирует ОК, но результаты использования dll не то, что я ожидал.
function Reverse(mWnd, aWnd: hWnd; Data, Parms: PChar; Show, NoPause: Boolean): Integer; stdcall;
var
Temp: String;
I: Integer;
begin
SetLength(Temp, Length(Data));
for I := 0 to Length(Data) do
begin
Temp[I] := Data[Length(Data)- I]; // Reversing string by retrieving characters from Data one at a time
end;
StrCopy(Data, PChar(Temp)); // Putting reversed string back into data
Result := 3;
end;
exports
Reverse;
begin
end.
Например, вызывающего DLL из Mirc как //say $dll(mydll,Reverse,hello)
дает выход только «о». Если параметр «hello sailor», выход будет «orilsao llhe». Я безуспешно пытался отслеживать работу кода, но я не могу понять, как изменяется значение Data. Я подозреваю, что моим собственным ограниченным знанием поведения PChar является способствующий фактор. Я приветствую любые советы, которые могут помочь. Cheers
Boolean is wrong. Используйте LongBool. Или BOOL. Строки должны быть PAnsiChar, а не PWideChar. Об этом много раз говорили здесь. –
Возможно, это обсуждалось так много раз, но поиски пропустили все это. Во время моего поста я не искал здесь для поведения PChar в версиях Delphi после Delphi7, и почему бы мне?Сначала я думал, что должен делать что-то неправильно. У меня нет ваших знаний, поэтому я вставил код. Я думал, что это проблема. Мало что я вспомнил о памяти и указателях, сосредоточил меня на том, как часы отладки ведут себя так по-разному в Delphi 7 против Delphi 2010. Cheers. – grasshopper
Вы должны прочитать документацию. Изменение Unicode было огромным и очень документированным. Не экономьте на поддержании актуальности. –