У меня проблемы с отправкой с использованием процедуры Dll с параметрами, им не разрешено добавлять параметры в вызов метода dll в моем тестовом проекте.Как вызвать процедуру DLL с параметрами?
Im пытается вызвать этот метод Dll:
procedure Transfer(sMessage: PChar); stdcall;
begin
MainForm.ShowThis(sMessage);
end;
exports
Transfer;
TestProj с помощью этого:
procedure TForm1.Button1Click(Sender: TObject);
var
DLLHandle : THandle;
begin
DLLHandle := LoadLibrary ('C:\Program Files\Borland\Delphi5\Projects\Dll\MyLink.dll');
if DLLHandle >= 32 then
try
@Trans := GetProcAddress (DLLHandle, 'Transfer');
if @Trans <> nil then
Trans //Would like to say something like: Trans('Hello')
else
Showmessage('Could not load method address');
finally
FreeLibrary(DLLHandle);
end
else
Showmessage('Could not load the dll');
end;
Ошибка компиляции я получу, если я использую "Trans ('Hello')" является: [Error] Unit1.pas (51): Слишком много фактических параметров.
Мне разрешено запускать его без параметров, но затем я получаю только джибера в своем окне showmessage и после сбоя, так как я не отправляю никаких сообщений.
Итак, вопрос в том, как я могу отправить строку в качестве параметра в dll? Что я делаю не так ?
Благодаря его Allmost работал так, как вы Сайд. First of Transfer - это процедура, поэтому она не должна возвращать строку так: TTransferPtr = procedure (sMessage: PChar); STDCALL. И если Trans <> nil для работы, он должен быть адресом указателя: if @Trans <> nil. Но другое тогда, что это право. Еще раз спасибо – Roise
Ах, извините за ошибки, я должен был сначала протестировать его перед публикацией. –
Если DLL написана в пред-D2009, приложение должно использовать 'PAnsiChar' вместо' PChar' для обеспечения совместимости, если приложение написано/обновлено до D2009 +. –