Dll помагайте
8 отговора
377 прегледа
Dll помагайте
Здравейте имам голям проблем!
DLL функция извлича информация от constanta и я праща на приложението, което извиква въпросната функция. До тук всичко си е наред.
Когато затворя приложението ми дава тая грешка: Runtime error 217 at 00413B04
Изплозвам ShareMem (на приложението и dll-а) заради константите.
DLL функция извлича информация от constanta и я праща на приложението, което извиква въпросната функция. До тук всичко си е наред.
Когато затворя приложението ми дава тая грешка: Runtime error 217 at 00413B04
Изплозвам ShareMem (на приложението и dll-а) заради константите.
Re: Dll помагайте
Ще помогне ако paste-неш малко от кода - как се свързваш с dll-а, как викаш функцията, как изглежда функцията и т.н.
Re: Dll помагайте
Application:
uses ... ShareMem;
function proba(b:byte):string; stdcall external 'projectdll.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(proba(5));
end;
DLL:
uses
SysUtils, System,
Classes, ShareMem;
const
c:array[1..6] of char = ('a','b','c','d','e','f');
function proba(b:byte):string; stdcall;
begin
result:=c;
end;
exports proba;
uses ... ShareMem;
function proba(b:byte):string; stdcall external 'projectdll.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(proba(5));
end;
DLL:
uses
SysUtils, System,
Classes, ShareMem;
const
c:array[1..6] of char = ('a','b','c','d','e','f');
function proba(b:byte):string; stdcall;
begin
result:=c;
end;
exports proba;
Това е кода:
Application:
uses ... ShareMem;
function proba(b:byte):string; stdcall external 'projectdll.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(proba(5));
end;
DLL:
uses
SysUtils, System,
Classes, ShareMem;
const
c:array[1..6] of char = ('a','b','c','d','e','f');
function proba(b:byte):string; stdcall;
begin
result:=c;
end;
exports proba;
uses ... ShareMem;
function proba(b:byte):string; stdcall external 'projectdll.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(proba(5));
end;
DLL:
uses
SysUtils, System,
Classes, ShareMem;
const
c:array[1..6] of char = ('a','b','c','d','e','f');
function proba(b:byte):string; stdcall;
begin
result:=c;
end;
exports proba;
Re: Това е кода:
ShareMem should always be the first unit listed in any program or library uses clause where it occurs.
Re: Това е кода:
Преместих ShareMem в началото на всички библиотеки, но пак е същата работа.?
Re: Това е кода:
Само за пробата опитай да направиш функцията да ти връща Char, а не String.
При мен това работи без проблеми:
-----------------------------
program prj;
{$APPTYPE CONSOLE}
uses ShareMem;
function proba(b:byte):string; stdcall external 'projectdll.dll';
begin
writeln(proba(5));
end.
-----------------------------
library projectdll;
uses ShareMem;
const
c:array[1..6] of char = ('a','b','c','d','e','f');
function proba(b:byte):string; stdcall;
begin
result:=c[ b ];
end;
exports proba;
end.
-----------------------------
Сигурен/на ли си, че проблема е с dll-а, а не с нещо друго в твоето приложение?
При мен това работи без проблеми:
-----------------------------
program prj;
{$APPTYPE CONSOLE}
uses ShareMem;
function proba(b:byte):string; stdcall external 'projectdll.dll';
begin
writeln(proba(5));
end.
-----------------------------
library projectdll;
uses ShareMem;
const
c:array[1..6] of char = ('a','b','c','d','e','f');
function proba(b:byte):string; stdcall;
begin
result:=c[ b ];
end;
exports proba;
end.
-----------------------------
Сигурен/на ли си, че проблема е с dll-а, а не с нещо друго в твоето приложение?
Редактирано от Formal на
Re: Това е кода:
Компилирай и Application-a и DLL-a като чекнеш Build with Runtime package в Project->Option.